ИМЯ

timer_getoverrun - возвращает счётчик переполнения таймера POSIX (для каждого процесса отдельно)

LIBRARY

Real-time library ( librt, -lrt)

СИНТАКСИС

#include <time.h>
int timer_getoverrun(timer_t timerid);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
timer_getoverrun():
    _POSIX_C_SOURCE >= 199309L

ОПИСАНИЕ

Вызов timer_getoverrun() возвращает «счётчик переполнения» (overrun count) таймера, заданного в timerid. Приложение может использовать счётчик переполнения для точного вычисления количества срабатываний (expirations) таймера, которые бы произошли за указанный временной интервал. Переполнения таймера могут происходить при получении уведомлений о срабатывании (expiration notifications) посредством сигналов ( SIGEV_SIGNAL) и нитей ( SIGEV_THREAD).
Если уведомление о срабатывании доставляется сигналом, то переполнение может происходить следующим образом. Независимо от того, используется ли для таймерных уведомлений сигнал реального времени или нет, система ставит в очередь не более одного сигнала на таймер (так определено в POSIX.1. В противном случае, если ставить в очередь один сигнал на каждое срабатывание таймера, то легко можно превысить разрешённый размер очереди сигналов в системы). Из-за задержек системного планировщика или временной блокировки сигнала может возникать задержка между генерацией уведомляющего сигнала и его доставкой (delivered) (например, в обработчик сигнала) или приёмом (accepted) (например, с помощью sigwaitinfo(2)). В этом промежутке могут произойти дополнительные срабатывания таймера. Переполнение счётчика таймера — это количество дополнительных срабатываний таймера, которые произошли между генерацией и доставкой или принятием сигнала.
Переполнение таймера также может произойти когда уведомление о срабатывании доставляется через вызов нити, так как здесь может возникать произвольная задержка между срабатыванием таймера и вызовом уведомляемой нити, и в этом промежутке могут произойти дополнительные срабатывания таймера.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении timer_getoverrun() возвращается счётчик переполнений заданного таймера; он может быть равен 0, если если переполнений не было. При ошибке возвращается -1, а errno устанавливается в соответствующее значение кода ошибки.

ОШИБКИ

EINVAL
Значение timerid не является допустимым идентификатором таймера.

ВЕРСИИ

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

СТАНДАРТЫ

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

ЗАМЕЧАНИЯ

Когда уведомления таймера доставляются посредством сигналов ( SIGEV_SIGNAL), в Linux также возможно узнать значение счётчика переполнения из поля si_overrun структуры siginfo_t (смотрите sigaction(2)). Это позволяет приложению не делать лишнего системного вызова для получения счётчика, но это непереносимое расширение POSIX.1.
В POSIX.1 переполнение таймера обсуждается только в контексте уведомлений таймера с помощью сигналов.

ДЕФЕКТЫ

POSIX.1 specifies that if the timer overrun count is equal to or greater than an implementation-defined maximum, DELAYTIMER_MAX, then timer_getoverrun() should return DELAYTIMER_MAX. However, before Linux 4.19, if the timer overrun value exceeds the maximum representable integer, the counter cycles, starting once more from low values. Since Linux 4.19, timer_getoverrun() returns DELAYTIMER_MAX (defined as INT_MAX in <limits.h>) in this case (and the overrun value is reset to 0).

ПРИМЕРЫ

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

СМ. ТАКЖЕ

clock_gettime(2), sigaction(2), signalfd(2), sigwaitinfo(2), timer_create(2), timer_delete(2), timer_settime(2), signal(7), time(7)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Azamat Hackimov <[email protected]>, Dmitry Bolkhovskikh <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]