nanosleep - останавливает работу процесса на заданное время
НАЗВАНИЕnanosleep - останавливает работу процесса на заданное
время
СИНТАКСИС
#include
int nanosleep(const struct timespec *req, struct timespec
*rem);
ОПИСАНИЕ
nanosleep приостанавливает работу процесса как минимум на
время, заданное параметром *req. Функция может вернуть
управление процессу ранее, если процесс получил
определенный сигнал. В этом случае функция возвращает
значение -1 (при этом значение errno становится равным
EINTR) и записывает оставшееся время в структуру, заданную
rem, если rem не равен NULL. Значение структуры *rem
можно использовать для того, чтобы завершить заданную
паузу путем повторного вызова nanosleep. В функции
используется структура timespec, позволяющая задавать
интервалы времени с точностью до наносекунды. Эта
структура описана в и имеет следующую форму:
struct timespec
{
time_t tv_sec; /* секунды */
long tv_nsec; /* наносекунды */
};
Значение поля наносекунд должно находиться в диапазоне от
0 до 999 999 999. По сравнению с sleep(3) и usleep(3)
nanosleep не влияет на сигналы, стандартизирована в POSIX,
позволяет задавать более точные интервалы времени и
позволяет более легким способом возобновить паузу после
прерывания ее сигналом. При удачном завершении вызова
возвращаемое значение равно нулю. При ошибке оно равно -1,
а переменной errno присваивается номер ошибки.
КОДЫ ОШИБОК
EINTR Пауза была прервана неблокированым сигналом,
отправленным процессу. Оставшееся время
записывается в структуру *rem для того, чтобы
позволить ему еще раз вызвать nanosleep для
возобновления паузы.
EINVAL Значение tv_nsec не находится в интервале от 0 до
999 999 999, или tv_sec - отрицательное число.
НАЙДЕННЫЕ ОШИБКИ
Текущая реализация nanosleep базируется на стандартном
механизме таймера в ядре, имеющем разрешение в 1/HZ c
(т.е, 10 мс в Linux/i386 и 1 мс в Linux/Alpha). Таким
образом, nanosleep всегда задерживает исполнение процесса
как минимум на заданное время, однако задержка может
длиться на 10 мс дольше заданной. По этой же причине
значение, возвращаемое в случае, если процесс получит
сигнал, округляется в большую сторону, до 1/HZ с.
Некоторым приложениям требуется задание более точных пауз
(например, для контроля за оборудованием, требующим точных
временных интервалов работы), поэтому nanosleep может
выдерживать более точные паузы. Если процесс протекает в
реальном времени (режимы SCHED_FIFO или SCHED_RR), то
паузы продолжительностью до 2 мс выдерживаются, как пустые
циклы, с точностью до микросекунд.
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1b (ранее POSIX.4).