Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

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

LIBRARY

       Standard C library (libc, -lc), since glibc 2.17

       Before glibc 2.17, Real-time library (librt, -lrt)

СИНТАКСИС

       #include <time.h>

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

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

       clock_nanosleep():
           _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

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

       The  time  values  passed  to  and  returned  by this call are specified using timespec(3)
       structures.

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

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

       CLOCK_TAI (начиная с Linux 3.10)
              A system-wide clock derived from wall-clock time but ignoring leap seconds.

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

       CLOCK_BOOTTIME (начиная с Linux 2.6.39)
              Identical to CLOCK_MONOTONIC, except that it also includes any time that the system
              is suspended.

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

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

       Если  flags  равно 0, то значение, указанное в request, считается относительным интервалом
       от текущего значения часов, заданных в clockid.

       Если  flags  равно  TIMER_ABSTIME,  то  значением  request  считается  абсолютное   время,
       отсчитываемое часами, заданными в clockid. Если request меньше или равно текущему значению
       часов, то clock_nanosleep() немедленно завершает работу без приостановки работы вызывающий
       нити.

       clock_nanosleep() приостанавливает выполнение вызывающей нити до тех пор, пока не наступит
       время, указанное в request, или не будет получен сигнал,  вызывающий  обработчик  сигнала,
       или процесс не завершится.

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

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

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

ОШИБКИ

       EFAULT В request или remain указан неправильный адрес.

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

       EINVAL The value in the tv_nsec field was not in the range [0, 999999999]  or  tv_sec  was
              negative.

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

       ENOTSUP
              The kernel does not support sleeping against this clockid.

ВЕРСИИ

       The clock_nanosleep()  system call first appeared in  Linux  2.6.   Support  is  available
       since glibc 2.1.

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

       Если  интервал,  указанный в request, не кратен степени разрешения используемых часов (см.
       time(7)), то интервал  будет  округлён  до  следующего  кратного  значения.  Также,  после
       окончания  интервала  приостановки может возникнуть задержка перед тем, как ЦП освободится
       снова для следующего выполнения вызывающей нити.

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

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

       Аргумент remain не нужен и не используется, если flags равно TIMER_ABSTIME.  (Приостановка
       с абсолютным значением может быть перезапущена с тем же значением аргумента request.)

       В  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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.