Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       clock_nanosleep - остановка работы процесса на точно выдержанное время с помощью определённых часов

БИБЛИОТЕКА

       Стандартная библиотека C (libc, -lc), начиная с glibc 2.17

       До glibc 2.17, библиотека реального времени (librt, -lrt)

ОБЗОР

       #include <time.h>

       int clock_nanosleep(clockid_t clockid, int flags,
                           const struct timespec *t,
                           struct timespec *_Nullable remain);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       clock_nanosleep():
           _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

       Подобно nanosleep(2), clock_nanosleep() позволяет вызывающей нити приостановить работу на некоторое время
       с  наносекундной  точностью.  Отличие  в  том,  что  вызывающий  может  выбрать  часы,  по  которым будет
       отсчитываться интервал, что позволяет задавать интервал абсолютным или относительным значением времени.

       Значения времени, передаваемые  и  возвращаемые  этим  вызовом,  указываются  с  использованием  структур
       timespec(3).

       Аргумент  clockid определяет часы, по которым отсчитывается интервал. Этот аргумент может иметь следующие
       значения:

       CLOCK_REALTIME
              Настраиваемые системные часы реального времени.

       CLOCK_TAI (начиная с Linux 3.10)
              Системные часы, основанные на времени настенных часов, но учитывающие дополнительные секунды.

       CLOCK_MONOTONIC
              Ненастраиваемые, постоянно идущие вперёд часы, которые отчитывают время с некоторой неопределённой
              точки в прошлом, которая не изменяется с момент запуска системы.

       CLOCK_BOOTTIME (начиная с Linux 2.6.39)
              Идентично CLOCK_MONOTONIC, за исключением того, что он также включает любое время,  когда  система
              приостановлена.

       CLOCK_PROCESS_CPUTIME_ID
              Настраиваемые для каждого процесса часы, измеряющие время ЦП, затраченное всеми нитями процесса.

       Подробней   об   этих   часах   смотрите   в   clock_getres(2).   Также   ID   часов   ЦП,   возвращаемый
       clock_getcpuclockid(3) и pthread_getcpuclockid(3), также может передаваться в clockid.

       If flags is 0, then the value specified in t is interpreted as an interval relative to the current  value
       of the clock specified by clockid.

       If  flags  is TIMER_ABSTIME, then t is interpreted as an absolute time as measured by the clock, clockid.
       If t is less than or equal to the current value of the clock, then clock_nanosleep()  returns immediately
       without suspending the calling thread.

       clock_nanosleep()  suspends the execution of the calling thread until either at least the time  specified
       by  t  has elapsed, or a signal is delivered that causes a signal handler to be called or that terminates
       the process.

       Если вызов прерывается обработчиком сигнала, то clock_nanosleep() завершается  с  ошибкой  EINTR.  Также,
       если  remain  не  равно  NULL  и  flags  не  равно  TIMER_ABSTIME,  то  он  возвращает  в  remain остаток
       непроведённого в остановке времени. Это значение можно использовать в вызове  clock_nanosleep()  снова  и
       завершить (относительно) приостановку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       После успешной приостановки на запрошенное время, clock_nanosleep() возвращает 0. Если вызове был прерван
       обработчиком  сигнала  или  произошла  ошибка,  то  возвращается  один  из  положительных номеров ошибок,
       перечисленных в разделе ОШИБКИ.

ОШИБКИ

       EFAULT t или remain указал неверный адрес.

       EINTR  Сон прерван обработчиком сигнала; смотрите signal(7).

       EINVAL Значение в поле tv_nsec не находилось в диапазоне [0, 999999999] или tv_nsec было отрицательным.

       EINVAL Неверное значение clockid. (Значение CLOCK_THREAD_CPUTIME_ID нельзя указать в clockid.)

       ENOTSUP
              Ядро не поддерживает сон против этого clockid.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.  Linux 2.6, glibc 2.1.

ПРИМЕЧАНИЯ

       If the interval specified in t is not  an  exact  multiple  of  the  granularity  underlying  clock  (see
       time(7)),  then  the  interval  will  be  rounded  up to the next multiple.  Furthermore, after the sleep
       completes, there may still be a delay before the CPU becomes free  to  once  again  execute  the  calling
       thread.

       Использование  абсолютного  таймера  позволяет  избежать  проблем  с  уходом  часов,  которые  описаны  в
       nanosleep(2).  (Такие  проблемы  ухудшаются,  если  программа  пытается  перезапустить  приостановку   на
       относительный   интервал   после  постоянно  прерывания  сигналами.)  Чтобы  избежать  этих  проблем  при
       использовании относительного интервала, вызовите  clock_gettime(2)  с  нужными  часами,  добавьте  нужный
       интервал к возвращённому значению времени и вызовите clock_nanosleep() с флагом TIMER_ABSTIME.

       clock_nanosleep()  никогда не перезапускается после того, как прерван обработчиком сигнала, независимо от
       значения флага SA_RESTART в sigaction(2).

       The remain argument is unused, and unnecessary, when flags is TIMER_ABSTIME.  (An absolute sleep  can  be
       restarted using the same t argument.)

       В POSIX.1 указано, что clock_nanosleep() не влияет на заданные обработчики сигналов или сигнальные маски.

       В  POSIX.1  указано,  что после изменения значения часов CLOCK_REALTIME с помощью clock_settime(2), новое
       значение часов должно быть использовано для определения времени,  на  которое  была  блокирована  нить  с
       помощью  clock_nanosleep()  с  абсолютным  значением; если по новому значению часов интервал приостановки
       истёк, то вызов clock_nanosleep() немедленно завершается.

       В POSIX.1 указано, что изменение значения часов CLOCK_REALTIME с помощью  clock_settime(2)  не  оказывает
       влияние на нити, которые заблокированы с помощью clock_nanosleep() с относительным значением интервала.

СМОТРИТЕ ТАКЖЕ

       clock_getres(2),  nanosleep(2),  restart_syscall(2),  timer_create(2),  sleep(3), timespec(3), usleep(3),
       time(7)

ПЕРЕВОД

       Русский перевод этой страницы  руководства  разработал(и)  Azamat  Hackimov  <azamat.hackimov@gmail.com>,
       Dmitriy   S.   Seregin  <dseregin@59.ru>,  Dmitry  Bolkhovskikh  <d20052005@yandex.ru>,  Katrin  Kutepova
       <blackkatelv@gmail.com>, Yuri Kozlov  <yuray@komyakino.ru>,  Иван  Павлов  <pavia00@gmail.com>  и  Kirill
       Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                               clock_nanosleep(2)