timer_getoverrun(2)

NUME
timer_getoverrun - obține numărul de depășiri al temporizatorului POSIX al unui proces

BIBLIOTECA
Biblioteca de timp real (librt, -lrt)

SINOPSIS
#include <time.h>

int timer_getoverrun(timer_t timerid);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

timer_getoverrun():
    _POSIX_C_SOURCE >= 199309L

DESCRIERE
timer_getoverrun() returnează „numărul de depășiri” pentru temporizatorul la care se face referire prin timerid. O aplicație poate utiliza numărul de depășiri pentru a calcula cu precizie numărul de expirări ale temporizatorului care ar fi avut loc într-un anumit interval de timp. Depășirea temporizatorului poate avea loc atât la primirea notificărilor de expirare prin intermediul semnalelor (SIGEV_SIGNAL), cât ș i prin intermediul firelor de execuție (SIGEV_THREAD).

Atunci când notificările de expirare sunt transmise prin intermediul unui semnal, se pot produce depășiri după cum urmează. Indiferent dacă se utilizează sau nu un semnal în timp real pentru notificările de temporizare, sistemul pune în coadă cel mult un semnal pentru fiecare temporizator. (Acesta este comportamentul specificat de POSIX.1. Alternativa, de a pune la coadă un semnal pentru fiecare expirare a temporizatorului, ar putea duce cu ușurință la depășirea limitelor permise pentru semnalele puse la coadă în sistem). Din cauza întârzierilor de planificare a sistemului sau pentru că semnalul poate fi blocat temporar, poate exista o întârziere între momentul în care semnalul de notificare este generat și momentul în care este livrat (de exemplu, prins de un gestionar de semnal) sau acceptat (de exemplu, utilizând sigwaitinfo(2)). În acest interval, pot avea loc alte expirări ale temporizatorului. Numărătoarea depășirii temporizatorului este numărul de expirări suplimentare ale temporizatorului care au avut loc între momentul în care semnalul a fost generat și momentul în care a fost transmis sau acceptat.

De asemenea, se pot produce depășiri ale temporizatorului atunci când notificările de expirare sunt transmise prin invocarea unui fir, deoarece poate exista o întârziere arbitrară între expirarea temporizatorului și invocarea firului de notificare, iar în acest interval de întârziere pot apărea expirări suplimentare ale temporizatorului.

VALOAREA RETURNATĂ
În caz de succes, timer_getoverrun() returnează numărul de depășiri ale temporizatorului specificat; acest număr poate fi 0 dacă nu au avut loc depășiri. În caz de eșec, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EINVAL
    id-cronometru nu este un ID de cronometru valid.

VERSIUNI
Atunci când notificările de temporizator sunt transmise prin intermediul semnalelor (SIGEV_SIGNAL), pe Linux este posibilă și obținerea numărului de depășiri prin intermediul câmpului si_overrun din structura siginfo_t (a se vedea sigaction(2)). Acest lucru permite unei aplicații să evite costurile suplimentare legate de efectuarea unui apel de sistem pentru a obține numărul de depășiri, dar este o extensie neportabilă la POSIX.1.

POSIX.1 discută despre depășirea temporizatoarelor numai în contextul notificărilor de temporizatoare care utilizează semnale.

STANDARDE
POSIX.1-2008.

ISTORIC
Linux 2.6. POSIX.1-2001.

ERORI
POSIX.1 specifică faptul că, dacă numărul de depășiri ale temporizatorului este egal sau mai mare decât un maxim definit de implementare, DELAYTIMER_MAX, atunci timer_getoverrun() trebuie să returneze DELAYTIMER_MAX. Cu toate acestea, înainte de Linux 4.19, în cazul în care valoarea de depășire a temporizatorului depășește numărul întreg maxim reprezentabil, contorul se repornește, pornind încă o dată de la valori scăzute. Începând cu Linux 4.19, timer_getoverrun() returnează DELAYTIMER_MAX (definit ca INT_MAX în <limits.h>) în acest caz (iar valoarea de depășire este readusă la 0).

EXEMPLE
A se vedea timer_create(2).

CONSULTAȚI ȘI
clock_gettime(2), sigaction(2), signalfd(2), sigwaitinfo(2), timer_create(2), timer_delete(2), timer_settime(2), signal(7), time(7)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.