.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH clock_nanosleep 2 "29 октября 2025 г." "Linux man\-pages 6.18" .SH НАИМЕНОВАНИЕ clock_nanosleep \- остановка работы процесса на точно выдержанное время с помощью определённых часов .SH БИБЛИОТЕКА Standard C library (\fIlibc\fP,\ \fI\-lc\fP), since glibc 2.17 .P Before glibc 2.17, Real\-time library (\fIlibrt\fP,\ \fI\-lrt\fP) .SH СИНТАКСИС \fB#include \fP .nf .P \fBint clock_nanosleep(clockid_t \fP\fIclockid\fP\fB, int \fP\fIflags\fP\fB,\fP \fB const struct timespec *\fP\fIt\fP\fB,\fP \fB struct timespec *_Nullable \fP\fIremain\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBclock_nanosleep\fP(): .nf _POSIX_C_SOURCE >= 200112L .fi .SH ОПИСАНИЕ Подобно \fBnanosleep\fP(2), \fBclock_nanosleep\fP() позволяет вызывающей нити приостановить работу на некоторое время с наносекундной точностью. Отличие в том, что вызывающий может выбрать часы, по которым будет отсчитываться интервал, что позволяет задавать интервал абсолютным или относительным значением времени. .P Значения времени, передаваемые и возвращаемые этим вызовом, указываются с использованием структур \fBtimespec\fP(3). .P .\" Look in time/posix-timers.c (kernel 5.6 sources) for the .\" 'struct k_clock' structures that have an 'nsleep' method Аргумент \fIclockid\fP определяет часы, по которым отсчитывается интервал. Этот аргумент может иметь следующие значения: .TP \fBCLOCK_REALTIME\fP Настраиваемые системные часы реального времени. .TP \fBCLOCK_TAI\fP (начиная с Linux 3.10) Системные часы, основанные на времени настенных часов, но учитывающие дополнительные секунды. .TP \fBCLOCK_MONOTONIC\fP .\" On Linux this clock measures time since boot. Ненастраиваемые, постоянно идущие вперёд часы, которые отчитывают время с некоторой неопределённой точки в прошлом, которая не изменяется с момент запуска системы. .TP \fBCLOCK_BOOTTIME\fP (начиная с Linux 2.6.39) Идентично \fBCLOCK_MONOTONIC\fP, за исключением того, что он также включает любое время, когда система приостановлена. .TP \fBCLOCK_PROCESS_CPUTIME_ID\fP .\" There is some trickery between glibc and the kernel .\" to deal with the CLOCK_PROCESS_CPUTIME_ID case. Настраиваемые для каждого процесса часы, измеряющие время ЦП, затраченное всеми нитями процесса. .P .\" Sleeping against CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM .\" is also possible (tested), with CAP_WAKE_ALARM, but I'm not .\" sure if this is useful or needs to be documented. Подробней об этих часах смотрите в \fBclock_getres\fP(2). Также ID часов ЦП, возвращаемый \fBclock_getcpuclockid\fP(3) и \fBpthread_getcpuclockid\fP(3), также может передаваться в \fIclockid\fP. .P If \fIflags\fP is 0, then the value specified in \fIt\fP is interpreted as an interval relative to the current value of the clock specified by \fIclockid\fP. .P If \fIflags\fP is \fBTIMER_ABSTIME\fP, then \fIt\fP is interpreted as an absolute time as measured by the clock, \fIclockid\fP. If \fIt\fP is less than or equal to the current value of the clock, then \fBclock_nanosleep\fP() returns immediately without suspending the calling thread. .P \fBclock_nanosleep\fP() suspends the execution of the calling thread until either at least the time specified by \fIt\fP has elapsed, or a signal is delivered that causes a signal handler to be called or that terminates the process. .P Если вызов прерывается обработчиком сигнала, то \fBclock_nanosleep\fP() завершается с ошибкой \fBEINTR\fP. Также, если \fIremain\fP не равно NULL и \fIflags\fP не равно \fBTIMER_ABSTIME\fP, то он возвращает в \fIremain\fP остаток непроведённого в остановке времени. Это значение можно использовать в вызове \fBclock_nanosleep\fP() снова и завершить (относительно) приостановку. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" После успешной приостановки на запрошенное время, \fBclock_nanosleep\fP() возвращает 0. Если вызове был прерван обработчиком сигнала или произошла ошибка, то возвращается один из положительных номеров ошибок, перечисленных в разделе ОШИБКИ. .SH ОШИБКИ .TP \fBEFAULT\fP \fIt\fP или \fIremain\fP указал неверный адрес. .TP \fBEINTR\fP Сон прерван обработчиком сигнала; смотрите \fBsignal\fP(7). .TP \fBEINVAL\fP Значение в поле \fItv_nsec\fP не находилось в диапазоне [0, 999999999] или \fItv_nsec\fP было отрицательным. .TP \fBEINVAL\fP Неверное значение \fIclockid\fP. (Значение \fBCLOCK_THREAD_CPUTIME_ID\fP нельзя указать в \fIclockid\fP.) .TP \fBENOTSUP\fP Ядро не поддерживает сон против этого \fIclockid\fP. .SH СТАНДАРТЫ POSIX.1\-2024. .SH ИСТОРИЯ POSIX.1\-2001. Linux 2.6, glibc 2.1. .SH ПРИМЕЧАНИЯ If the interval specified in \fIt\fP is not an exact multiple of the granularity underlying clock (see \fBtime\fP(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. .P Использование абсолютного таймера позволяет избежать проблем с уходом часов, которые описаны в \fBnanosleep\fP(2). (Такие проблемы ухудшаются, если программа пытается перезапустить приостановку на относительный интервал после постоянно прерывания сигналами.) Чтобы избежать этих проблем при использовании относительного интервала, вызовите \fBclock_gettime\fP(2) с нужными часами, добавьте нужный интервал к возвращённому значению времени и вызовите \fBclock_nanosleep\fP() с флагом \fBTIMER_ABSTIME\fP. .P \fBclock_nanosleep\fP() никогда не перезапускается после того, как прерван обработчиком сигнала, независимо от значения флага \fBSA_RESTART\fP в \fBsigaction\fP(2). .P The \fIremain\fP argument is unused, and unnecessary, when \fIflags\fP is \fBTIMER_ABSTIME\fP. (An absolute sleep can be restarted using the same \fIt\fP argument.) .P В POSIX.1 указано, что \fBclock_nanosleep\fP() не влияет на заданные обработчики сигналов или сигнальные маски. .P В POSIX.1 указано, что после изменения значения часов \fBCLOCK_REALTIME\fP с помощью \fBclock_settime\fP(2), новое значение часов должно быть использовано для определения времени, на которое была блокирована нить с помощью \fBclock_nanosleep\fP() с абсолютным значением; если по новому значению часов интервал приостановки истёк, то вызов \fBclock_nanosleep\fP() немедленно завершается. .P В POSIX.1 указано, что изменение значения часов \fBCLOCK_REALTIME\fP с помощью \fBclock_settime\fP(2) не оказывает влияние на нити, которые заблокированы с помощью \fBclock_nanosleep\fP() с относительным значением интервала. .SH "СМОТРИТЕ ТАКЖЕ" \fBclock_getres\fP(2), \fBnanosleep\fP(2), \fBrestart_syscall\fP(2), \fBtimer_create\fP(2), \fBsleep\fP(3), \fBtimespec\fP(3), \fBusleep\fP(3), \fBtime\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , Katrin Kutepova , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT debian-l10n-russian@lists.debian.org списка рассылки русских переводчиков .ME .