Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       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
       <azamat.hackimov@gmail.com>,   Dmitry   Bolkhovskikh  <d20052005@yandex.ru>,  Yuri  Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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