Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       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