Provided by:
manpages-ru_0.98-4_all 
ИМЯ
getitimer, setitimer - получить или установить значение внутреннего
таймера
ОБЗОР
#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct
itimerval *ovalue);
ОПИСАНИЕ
Система предоставляет каждому процессу три внутренних таймера, каждый
из которых работает в отдельном временном домене. Когда любой из этих
таймеров истекает, процессу, в котором функционировал данный таймер
посылается сигнал и таймер (потенциально) перезапускается.
ITIMER_REAL работает в реальном времени и по истечении отправляет
сигнал SIGALRM .
ITIMER_VIRTUAL работает только, когда процесс выполняется и по
истечении отправляет сигнал SIGVTALRM .
ITIMER_PROF работает и когда процесс выполняется, и когда система
работает в интересах процесса. Запущенный совместно с
ITIMER_VIRTUAL, данный таймер обычно используется для
профилирования времени, которое приложение проводит в
режиме пользователя и в режиме ядра. По истечении
отправляет сигнал SIGPROF .
Значения таймера задаются с помощью следующих структур:
struct itimerval {
struct timeval it_interval; /* next value */
struct timeval it_value; /* current value */
};
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
Фнкция getitimer заполняет структуру, предоставляемую как value
текущими установками таймера, который обозначается как which (одно из
значений ITIMER_REAL, ITIMER_VIRTUAL, или ITIMER_PROF). Элемент
it_value устанавливает ожидаемое время, оставшееся на таймере или ноль
если таймер запрещается. Похожим образом устанавливается it_interval
для значения сброса. Функция setitimer устанавливает указанный таймер
в значение, указанное в value. Если ovalue не ноль, там будет
сохранено старое значение таймера.
Таймеры уменьшающиеся от it_value до нуля, генерируют сигнал и
сбрасываются в it_interval. Таймер, который установлен в ноль
(it_value является нулем или таймер истёк и it_interval является нулём)
останавливается.
Оба значения tv_sec и tv_usec являются важными при определении
длительности работы таймера.
Таймеры никогда не истекают до затребованного времени, напротив они
немного запаздывают, в зависимости от шага системного таймера (в
настоящий момент 10 миллисекунд). По истечении будет сгенерирован
сигнал и произойдёт сброс таймера. Если таймер истекает в момент когда
процесс активен (это всегда так для ITIMER_VIRT), то сигнал будет
доставлен немедленно после генерации. В противном случае, доставка
будет отложена на небольшое время, которое зависит от степени загрузки
системы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха, возвращается ноль. В случае ошибки, возвращается -1 и
значение errno устанавливается соответствующим образом.
ОШИБКИ
EFAULT value или ovalue не являются правильными указателями.
EINVAL which не является одним из значений ITIMER_REAL, ITIMER_VIRT,
или ITIMER_PROF.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.4BSD (Данный вызов появился сперва в 4.2BSD).
СМОТРИ ТАКЖЕ
gettimeofday(2), sigaction(2), signal(2)
БАГИ
Под Linux, генерация и доставка сигнала разделены и каждому сигналу
разрешается генерировать только один недоставленный сигнал. Таким
образом, получается, что при очень сильной загрузке системы,
ITIMER_REAL таймер будет истекать перед тем как будет доставлен сигнал
от предыдущего истекания таймера. Второй сигнал в этом случае будет
потерян.
ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004