Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       getitimer, setitimer - obține sau stabilește valoarea unui temporizator de interval

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <sys/time.h>

       int getitimer(int which, struct itimerval *curr_value);
       int setitimer(int which, const struct itimerval *restrict new_value,
                     struct itimerval *_Nullable restrict old_value);

DESCRIERE

       Aceste  apeluri  de sistem oferă acces la temporizatoare de interval, adică la temporizatoare care expiră
       inițial la un moment dat în viitor și (opțional)  la  intervale  regulate  după  aceea.  Atunci  când  un
       temporizator  expiră,  se  generează  un semnal pentru procesul apelant, iar temporizatorul este repus la
       intervalul specificat (dacă intervalul este diferit de zero).

       Sunt furnizate trei tipuri de temporizatoare  --  specificate  prin  intermediul  argumentului  which  --
       fiecare  dintre  acestea numără în funcție de un ceas diferit și generează un semnal diferit la expirarea
       temporizatorului:

       ITIMER_REAL
              Acest temporizator numără în timp real (adică, ceas etalon „wall clock”). La fiecare expirare,  se
              generează un semnal SIGALRM.

       ITIMER_VIRTUAL
              Acest  temporizator  numără timpul de procesare consumat de proces în modul utilizator; (măsurarea
              include timpul CPU consumat de toate firele din proces). La  fiecare  expirare,  se  generează  un
              semnal SIGVTALRM.

       ITIMER_PROF
              Acest temporizator numără timpul total (adică atât cel consumat de utilizator, cât și cel consumat
              de sistem) de procesare consumat de proces; (măsurarea include timpul CPU consumat de toate firele
              din proces). La fiecare expirare, se generează un semnal SIGPROF.

              Împreună  cu ITIMER_VIRTUAL, acest temporizator poate fi utilizat pentru a trasa profilul timpului
              de procesare al utilizatorului și al sistemului consumat de proces.

       Un proces are doar unul din fiecare dintre cele trei tipuri de temporizatoare.

       Valorile temporizatoarelor sunt definite de următoarele structuri:

           struct itimerval {
               struct timeval it_interval; /* Intervalul pentru temporizatorul periodic */
               struct timeval it_value;    /* Timpul până la următoarea expirare */
           };

           struct timeval {
               time_t      tv_sec;         /* secunde */
               suseconds_t tv_usec;        /* microsecunde */
           };

   getitimer()
       Funcția getitimer() plasează valoarea curentă a temporizatorului specificat de which  în  memoria  tampon
       indicată de curr_value.

       Substructura  it_value  este  completată  cu  cantitatea  de  timp  rămasă  până la următoarea expirare a
       temporizatorului specificat. Această valoare se modifică pe măsură ce cronometrul scade și va fi  readusă
       la  it_interval  atunci  când  expiră temporizatorul.  Dacă ambele câmpuri din it_value sunt zero, atunci
       acest temporizator este în prezent dezarmat (inactiv).

       Substructura it_interval este completată cu intervalul de timp. În  cazul  în  care  ambele  câmpuri  din
       it_interval sunt zero, atunci este vorba de un temporizator „single-shot” (adică expiră o singură dată).

   setitimer()
       Funcția   setitimer()   armează   sau   dezarmează  temporizatorul  specificat  de  which,  prin  fixarea
       temporizatorului la valoarea specificată de new_value. În cazul în care old_value nu este  NULL,  memoria
       tampon  la  care  indică  este  utilizată  pentru a returna valoarea anterioară a temporizatorului (adică
       aceleași informații care sunt returnate de getitimer()).

       Dacă oricare dintre câmpurile din new_value.it_value este diferit de  zero,  atunci  temporizatorul  este
       armat  pentru  a expira inițial la ora specificată. Dacă ambele câmpuri din new_value.it_value sunt zero,
       atunci temporizatorul este dezarmat.

       Câmpul new_value.it_interval specifică noul interval pentru  temporizator;  dacă  ambele  subcâmpuri  ale
       acestuia sunt zero, temporizatorul are o singură declanșare „single-shot”.

VALOAREA RETURNATĂ

       În  caz  de  succes,  se  returnează zero. În caz de eroare, se returnează -1, iar errno este configurată
       pentru a indica eroarea.

ERORI-IEȘIRE

       EFAULT new_value, old_value sau curr_value nu este un indicator valid.

       EINVAL which nu este unul dintre ITIMER_REAL, ITIMER_VIRTUAL sau ITIMER_PROF; sau (de  la  Linux  2.6.22)
              unul  dintre  câmpurile  tv_usec  din  structura  indicată de new_value conține o valoare în afara
              intervalului [0, 999999].

VERSIUNI

       Standardele nu spun nimic cu privire la semnificația apelului:

           setitimer(which, NULL, &old_value);

       Multe sisteme (Solaris, BSD și poate și altele) tratează acest lucru ca fiind echivalent cu:

           getitimer(which, &old_value);

       În Linux, acest lucru este tratat ca fiind echivalent cu un apel în care câmpurile new_value  sunt  zero;
       adică,  temporizatorul  este  dezactivat.  Nu  folosiți  această  caracteristică  greșită din Linux: este
       neportabilă și nefolositoare.

STANDARDE

       POSIX.1-2008.

ISTORIC

       POSIX.1-2001, SVr4, 4.4BSD (acest apel a apărut pentru prima  dată  în  4.2BSD).  POSIX.1-2008  marchează
       getitimer()  și  setitimer()  ca  fiind  învechite,  recomandând  în  schimb  utilizarea API POSIX timers
       (timer_gettime(2), timer_settime(2), etc.).

NOTE

       Temporizatoarele nu vor expira niciodată înainte de ora solicitată, dar pot expira la o anumită  perioadă
       (scurtă)  de  timp  după  aceea,  care  depinde  de  rezoluția  temporizatorului  de sistem și de sarcina
       sistemului; a se vedea time(7); (dar vedeți însă secțiunea ERORI de mai jos). Dacă temporizatorul  expiră
       în  timp  ce  procesul  este  activ  (întotdeauna  adevărat pentru ITIMER_VIRTUAL), semnalul va fi livrat
       imediat ce este generat.

       Un  copil  creat  prin  fork(2)  nu  moștenește  temporizatoarele  de  interval   ale   părintelui   său.
       Temporizatoarele de interval sunt păstrate în cazul unui execve(2).

       POSIX.1  lasă nespecificată interacțiunea dintre setitimer() și cele trei interfețe alarm(2), sleep(3) și
       usleep(3).

ERORI

       Generarea și transmiterea unui semnal sunt distincte și un singur exemplu pentru fiecare dintre semnalele
       enumerate mai sus poate fi în așteptare pentru un  proces.  În  cazul  unei  încărcări  foarte  mari,  un
       temporizator  ITIMER_REAL  poate  expira  înainte  ca  semnalul  de  la  o expirare anterioară să fi fost
       transmis. În acest caz, al doilea semnal se pierde.

       Înainte de Linux 2.6.16, valorile temporizatoarelor sunt reprezentate în clipe  „jiffies”.  În  cazul  în
       care  se face o cerere care definește un temporizator cu o valoare a cărei reprezentare jiffies depășește
       MAX_SEC_IN_JIFFIES (definit în include/linux/jiffies.h), atunci  temporizatorul  este  trunchiat  în  mod
       silențios  la această valoare plafon. Pe Linux/i386 (unde, începând cu Linux 2.6.13, valoarea implicită a
       unei clipe „jiffy” este de 0,004 secunde), acest lucru înseamnă că valoarea plafon pentru un temporizator
       este de aproximativ 99,42 zile. Începând cu Linux  2.6.16,  nucleul  utilizează  o  reprezentare  internă
       diferită pentru timpi, iar acest plafon este eliminat.

       Pe  anumite  sisteme  (inclusiv  i386),  nucleele  Linux  anterioare la Linux 2.6.12 au o eroare care, în
       anumite circumstanțe, va produce expirarea prematură a temporizatorului  de  până  la  o  clipă  „jiffy”.
       Această eroare este corectată în Linux 2.6.12.

       POSIX.1-2001  spune că setitimer() trebuie să eșueze dacă este specificată o valoare tv_usec care se află
       în afara intervalului [0, 999999]. Cu toate acestea, până la Linux 2.6.21 inclusiv, Linux nu dă o eroare,
       dar în schimb ajustează în tăcere valoarea corespunzătoare în secunde pentru  temporizator.  Începând  cu
       Linux 2.6.22, această neconformitate a fost reparată: o valoare tv_usec necorespunzătoare are ca rezultat
       o eroare EINVAL.

CONSULTAȚI ȘI

       gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), 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  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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                       getitimer(2)