MAN getitimer 2
Материал из Gentoo Linux Wiki
- Вернуться в раздел мануалов
Содержание |
[править] Имя
getitimer, setitimer - получить или установить значение внутреннего таймера
[править] Обзор
0
#include <sys/time.h>
int getitimer(int
which , struct itimerval
- value );
int setitimer(int
which , const struct itimerval
- value ,
struct itimerval
- ovalue );
[править] Описание
Система предоставляет каждому процессу три внутренних таймера, каждый из которых работает в отдельном временном домене. Когда любой из этих таймеров истекает, процессу, в котором функционировал данный таймер посылается сигнал и таймер (потенциально) перезапускается.
1.5i ITIMER_REAL работает в реальном времени и по истечении отправляет сигнал SIGALRM . ITIMER_VIRTUAL работает только, когда процесс выполняется и по истечении отправляет сигнал SIGVTALRM . ITIMER_PROF работает и когда процесс выполняется, и когда система работает в интересах процесса. Запущенный совместно с ITIMER_VIRTUAL , данный таймер обычно используется для профилирования времени, которое приложение проводит в режиме пользователя и в режиме ядра. По истечении отправляет сигнал SIGPROF .
Значения таймера задаются с помощью следующих структур:
0
.5i
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
[править] Комментарии к man файлу
Copyright 7/93 by Darren Senn <sinster@scintilla.santa-clara.ca.us>
Based on a similar page Copyright 1992 by Rick Faith
May be freely distributed
Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
Дата последней коррекции перевода 29.05.2004
Перевод с английского сделал Виктор Вислобоков <corochoone@perm.ru>
http://www.linuxshare.ru/projects/trans/mans.html
