Scroll to navigation

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 содержится код ошибки.

ОШИБКИ

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

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

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

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

ВЕРСИИ

Данные системные вызовы появились в Linux 2.6.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, POSIX.1-2008.

ПРИМЕРЫ

Смотрите timer_create(2).

СМ. ТАКЖЕ

timer_create(2), timer_getoverrun(2), time(7)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

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

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

9 июня 2020 г. Linux