timer_settime(2)

НАИМЕНОВАНИЕ
timer_settime, timer_gettime - запускает/останавливает и возвращает состояние таймера POSIX некоторого процесса

БИБЛИОТЕКА
Библиотека реального времени (librt, -lrt)

ОБЗОР
#include <time.h>

int timer_gettime(timer_t timerid, struct itimerspec *curr_value);
int timer_settime(timer_t timerid, int flags,
                  const struct itimerspec *restrict new_value,
                  struct itimerspec *_Nullable restrict old_value);

    Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

timer_settime(), timer_gettime():
    _POSIX_C_SOURCE >= 199309L

ОПИСАНИЕ
timer_settime() arms or disarms the timer identified by timerid. The new_value argument is pointer to an itimerspec structure that specifies the new initial value and the new interval for the timer. The itimerspec structure is described in itimerspec(3type).

Каждая подструктура структуры itimerspec представляет собой структуру timespec(3), которая позволяет задавать значение времени в секундах и наносекундах. Эти значения времени отсчитываются по часам, которые были указаны при создании таймера с помощью 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 содержится код ошибки.

ОШИБКИ
Эти функции могут завершиться со следующими ошибками:

EFAULT
    Некорректный указатель new_value, old_value или curr_value.

EINVAL
    Неверное значение timerid.

timer_settime() может завершиться со следующими ошибками:

EINVAL
    Значение new_value.it_value отрицательно; или new_value.it_value.tv_nsec отрицательно или больше 999999999.

СТАНДАРТЫ
POSIX.1-2024.

ИСТОРИЯ
Linux 2.6. POSIX.1-2001.

ПРИМЕРЫ
Смотрите timer_create(2).

СМОТРИТЕ ТАКЖЕ
timer_create(2), timer_getoverrun(2), timespec(3), time(7)

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).