TIMER_SETTIME(2) | Руководство программиста Linux | TIMER_SETTIME(2) |
timer_settime, timer_gettime - запускает/останавливает и возвращает состояние таймера POSIX некоторого процесса
#include <time.h>
int timer_settime(timer_t timerid, int flags, const struct itimerspec *new_value, struct itimerspec *old_value); int timer_gettime(timer_t timerid, struct itimerspec *curr_value);
Компонуется при указании параметра -lrt.
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
timer_settime(), timer_gettime(): _POSIX_C_SOURCE >= 199309L
Вызов timer_settime() запускает или останавливает таймер, указанный в timerid. Аргумент new_value — это указатель на структуру itimerspec, которая определяет новое начальное значение и новый интервал таймера. Структура itimerspec определена следующим образом:
struct timespec { time_t tv_sec; /* секунды */ long tv_nsec; /* наносекунды */ }; struct itimerspec { struct timespec it_interval; /* интервал таймера */ struct timespec it_value; /* первое срабатывание */ };
Каждая подструктура структуры itimerspec представляет собой структуру timespec, которая позволяет задавать значение времени в секундах и наносекундах. Эти значения времени отсчитываются по часам, которые были указаны при создании таймера с помощью timer_create(2).
Если new_value->it_value равно ненулевому значению (т. е., любое из подполей не равно нулю), то timer_settime() запускает таймер, устанавливая ему первое время срабатывания (если таймер уже запущен, то предыдущие параметры перезаписываются). Если new_value->it_value равно нулю (т. е., оба подполя равны нулю), то таймер выключается.
В поле new_value->it_interval указывается период таймера в секундах и наносекундах. Если это поле равно нулю, то каждый раз, когда таймер срабатывает, он перезапускается со значением, указанным в new_value->it_interval. Если new_value->it_interval равно нулю, то таймер срабатывает только один раз, согласно заданному в it_value времени.
По умолчанию, начальное время срабатывания, указанное в new_value->it_value, считается относительно текущего времени на часах таймера на момент вызова. Это можно изменить, указав TIMER_ABSTIME в flags; в этом случае new_value->it_value рассматривается как абсолютное значение по часам таймера; то есть таймер сработает, когда значение часов достигнет значения, указанного в new_value->it_value. Если указанное абсолютное время уже прошло, то таймер срабатывает немедленно и счётчик переполнения изменяется соответствующим образом (смотрите timer_getoverrun(2)).
Если значение часов CLOCK_REALTIME корректируется (adjusted) и указано абсолютное значение у включённого таймера с этими часами, то срабатывание таймера будет скорректировано соответствующим образом. Корректировка часов CLOCK_REALTIME не влияет на относительные таймеры, использующие эти часы.
Если значение old_value не равно NULL, то оно указывает на буфер, который используется для возврата предыдущего интервала таймера (в old_value->it_interval) и количества времени, которое осталось таймеру до срабатывания (в old_value->it_value).
Вызов timer_gettime() возвращает время до следующего срабатывания таймера timerid и интервал в буфер curr_value. Оставшееся время до следующего срабатывания возвращается в curr_value->it_value; это всегда относительное значение, независимо от того, указывался ли флаг TIMER_ABSTIME при включении таймера. Если значение curr_value->it_value равно нулю, то таймер в данный момент выключен. Интервал таймера возвращается в curr_value->it_interval. Если значение curr_value->it_interval равно нулю, то это «одноразовый» таймер.
При успешном выполнении timer_settime() и timer_gettime() возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
Эти функции могут завершиться со следующими ошибками:
timer_settime() может завершиться со следующими ошибками:
Данные системные вызовы появились в Linux 2.6.
POSIX.1-2001, POSIX.1-2008.
Смотрите timer_create(2).
2017-09-15 | Linux |