Документация по LinuxLinuxDoc.Ru 🔍

getitimer, setitimer - считывает или устанавливает значение таймера интервалов (interval timer)

НАЗВАНИЕ
getitimer, setitimer - считывает или устанавливает
значение таймера интервалов (interval timer)

СИНТАКСИС
#include

int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value,
struct itimerval *ovalue);

ОПИСАНИЕ
Система предоставляет каждому процессу три таймера,
значение каждого из которых уменьшается на единицу по
истечении установленного времени. Когда на одном из
таймеров заканчивается время, процессу посылается сигнал и
таймер обычно перезапускается.

ITIMER_REAL уменьшается постоянно (in real time) и
подает сигнал SIGALRM, когда значение
таймера становится равным 0.

ITIMER_VIRTUAL уменьшается только во время работы процесса
и подает сигнал SIGVTALRM, когда значение
таймера становится равным 0.

ITIMER_PROF уменьшается во время работы процесса и
когда система выполняет что-либо по заданию
процесса. Совместно с ITIMER_VIRTUAL этот
таймер обычно используется для
профилирования времени работы приложения в
пользовательской области и в области ядра.
Когда значение таймера становится равным 0,
подается сигнал SIGPROF.

Величина, на которую устанавливается таймер, определяется
следующими структурами:
struct itimerval {
struct timeval it_interval; /* следующее значение */
struct timeval it_value; /* текущее значение */
};
struct timeval {
long tv_sec; /* секунды */
long tv_usec; /* микросекунды */
};

Функция getitimer(2) заполняет структуру value текущим
значением which ( ITIMER_REAL, ITIMER_VIRTUAL, или
ITIMER_PROF). it_value устанавливается в соответствии с
тем количеством времени, которое осталось на таймере, или
приравнивается нулю, если таймер выключен. Аналогично
устанавливается it_interval. Функция setitimer(2)
устанавливает значение таймера равным величине, указанной
в 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).

НАЙДЕННЫЕ ОШИБКИ
В Linux, все генерируемые сигналы являются уникальными и
на каждый из них система отвечает уникальным процессом.
При чрезвычайной перегруженности ситемы ITIMER_REAL может
закончиться до того момента, как сигнал от предыдущего
будет доставлен. И таким образом, сигнал от последующего
таймера будет потерян.
Читать новости Linux в Telegram
Linux - getitimer, setitimer - считывает или устанавливает значение таймера интервалов (interval timer)
Мы в соцсетях ✉