getitimer(2) System Calls Manual getitimer(2) NUME getitimer, setitimer - obine sau stabilete valoarea unui temporizator de interval BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include 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 ofera acces la temporizatoare de interval, adica la temporizatoare care expira iniial la un moment dat in viitor i (opional) la intervale regulate dupa aceea. Atunci cand un temporizator expira, se genereaza un semnal pentru procesul apelant, iar temporizatorul este repus la intervalul specificat (daca intervalul este diferit de zero). Sunt furnizate trei tipuri de temporizatoare -- specificate prin intermediul argumentului which -- fiecare dintre acestea numara in funcie de un ceas diferit i genereaza un semnal diferit la expirarea temporizatorului: ITIMER_REAL Acest temporizator numara in timp real (adica, ceas etalon ,,wall clock"). La fiecare expirare, se genereaza un semnal SIGALRM. ITIMER_VIRTUAL Acest temporizator numara timpul de procesare consumat de proces in modul utilizator; (masurarea include timpul CPU consumat de toate firele din proces). La fiecare expirare, se genereaza un semnal SIGVTALRM. ITIMER_PROF Acest temporizator numara timpul total (adica atat cel consumat de utilizator, cat i cel consumat de sistem) de procesare consumat de proces; (masurarea include timpul CPU consumat de toate firele din proces). La fiecare expirare, se genereaza un semnal SIGPROF. Impreuna 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 urmatoarele structuri: struct itimerval { struct timeval it_interval; /* Intervalul pentru temporizatorul periodic */ struct timeval it_value; /* Timpul pana la urmatoarea expirare */ }; struct timeval { time_t tv_sec; /* secunde */ suseconds_t tv_usec; /* microsecunde */ }; getitimer() Funcia getitimer() plaseaza valoarea curenta a temporizatorului specificat de which in memoria tampon indicata de curr_value. Substructura it_value este completata cu cantitatea de timp ramasa pana la urmatoarea expirare a temporizatorului specificat. Aceasta valoare se modifica pe masura ce cronometrul scade i va fi readusa la it_interval atunci cand expira temporizatorul. Daca ambele campuri din it_value sunt zero, atunci acest temporizator este in prezent dezarmat (inactiv). Substructura it_interval este completata cu intervalul de timp. In cazul in care ambele campuri din it_interval sunt zero, atunci este vorba de un temporizator ,,single-shot" (adica expira o singura data). setitimer() Funcia setitimer() armeaza sau dezarmeaza temporizatorul specificat de which, prin fixarea temporizatorului la valoarea specificata de new_value. In cazul in care old_value nu este NULL, memoria tampon la care indica este utilizata pentru a returna valoarea anterioara a temporizatorului (adica aceleai informaii care sunt returnate de getitimer()). Daca oricare dintre campurile din new_value.it_value este diferit de zero, atunci temporizatorul este armat pentru a expira iniial la ora specificata. Daca ambele campuri din new_value.it_value sunt zero, atunci temporizatorul este dezarmat. Campul new_value.it_interval specifica noul interval pentru temporizator; daca ambele subcampuri ale acestuia sunt zero, temporizatorul are o singura declanare ,,single-shot". VALOAREA RETURNATA In caz de succes, se returneaza zero. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE 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 campurile tv_usec din structura indicata de new_value conine o valoare in afara intervalului [0, 999999]. VERSIUNI Standardele nu spun nimic cu privire la semnificaia apelului: setitimer(which, NULL, &old_value); Multe sisteme (Solaris, BSD i poate i altele) trateaza acest lucru ca fiind echivalent cu: getitimer(which, &old_value); In Linux, acest lucru este tratat ca fiind echivalent cu un apel in care campurile new_value sunt zero; adica, temporizatorul este dezactivat. Nu folosii aceasta caracteristica greita din Linux: este neportabila i nefolositoare. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.4BSD (acest apel a aparut pentru prima data in 4.2BSD). POSIX.1-2008 marcheaza getitimer() i setitimer() ca fiind invechite, recomandand in schimb utilizarea API POSIX timers (timer_gettime(2), timer_settime(2), etc.). NOTE Temporizatoarele nu vor expira niciodata inainte de ora solicitata, dar pot expira la o anumita perioada (scurta) de timp dupa aceea, care depinde de rezoluia temporizatorului de sistem i de sarcina sistemului; a se vedea time(7); (dar vedei insa seciunea ERORI de mai jos). Daca temporizatorul expira in timp ce procesul este activ (intotdeauna adevarat pentru ITIMER_VIRTUAL), semnalul va fi livrat imediat ce este generat. Un copil creat prin fork(2) nu motenete temporizatoarele de interval ale parintelui sau. Temporizatoarele de interval sunt pastrate in cazul unui execve(2). POSIX.1 lasa nespecificata interaciunea dintre setitimer() i cele trei interfee 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 in ateptare pentru un proces. In cazul unei incarcari foarte mari, un temporizator ITIMER_REAL poate expira inainte ca semnalul de la o expirare anterioara sa fi fost transmis. In acest caz, al doilea semnal se pierde. Inainte de Linux 2.6.16, valorile temporizatoarelor sunt reprezentate in clipe ,,jiffies". In cazul in care se face o cerere care definete un temporizator cu o valoare a carei reprezentare jiffies depaete MAX_SEC_IN_JIFFIES (definit in include/linux/jiffies.h), atunci temporizatorul este trunchiat in mod silenios la aceasta valoare plafon. Pe Linux/i386 (unde, incepand cu Linux 2.6.13, valoarea implicita a unei clipe ,,jiffy" este de 0,004 secunde), acest lucru inseamna ca valoarea plafon pentru un temporizator este de aproximativ 99,42 zile. Incepand cu Linux 2.6.16, nucleul utilizeaza o reprezentare interna diferita pentru timpi, iar acest plafon este eliminat. Pe anumite sisteme (inclusiv i386), nucleele Linux anterioare la Linux 2.6.12 au o eroare care, in anumite circumstane, va produce expirarea prematura a temporizatorului de pana la o clipa ,,jiffy". Aceasta eroare este corectata in Linux 2.6.12. POSIX.1-2001 spune ca setitimer() trebuie sa eueze daca este specificata o valoare tv_usec care se afla in afara intervalului [0, 999999]. Cu toate acestea, pana la Linux 2.6.21 inclusiv, Linux nu da o eroare, dar in schimb ajusteaza in tacere valoarea corespunzatoare in secunde pentru temporizator. Incepand cu Linux 2.6.22, aceasta neconformitate a fost reparata: o valoare tv_usec necorespunzatoare are ca rezultat o eroare EINVAL. CONSULTAI I gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), time(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 getitimer(2)