clock_nanosleep(2) System Calls Manual clock_nanosleep(2) NUME clock_nanosleep - repaus(somn) de inalta rezoluie cu ceas specificabil BIBLIOTECA Biblioteca C standard (libc, -lc), incepand cu glibc 2.17 Inainte de glibc 2.17, biblioteca in timp real (librt, -lrt) SINOPSIS #include int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *t, struct timespec *_Nullable remain); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): clock_nanosleep(): _POSIX_C_SOURCE >= 200112L DESCRIERE Ca i nanosleep(2), clock_nanosleep() permite firului apelant sa doarma pentru un interval specificat cu precizie de nanosecunde. Acesta difera prin faptul ca permite apelantului sa selecteze ceasul in raport cu care urmeaza sa fie masurat intervalul de somn i prin faptul ca intervalul de somn poate fi specificat ca valoare absoluta sau relativa. Valorile de timp transmise i returnate de acest apel sunt specificate folosind structurile timespec(3). Argumentul clockid specifica ceasul in raport cu care urmeaza sa fie masurat intervalul de somn. Acest argument poate avea una dintre urmatoarele valori: CLOCK_REALTIME Un ceas in timp real reglabil la nivelul intregului sistem. CLOCK_TAI (incepand cu Linux 3.10) Un ceas la nivel de sistem derivat din ceasul etalon, dar care numara secundele bisecte. CLOCK_MONOTONIC Un ceas neconfigurabil, cu cretere monotona, care masoara timpul de la un moment nespecificat in trecut i care nu se modifica dupa pornirea sistemului. CLOCK_BOOTTIME (incepand cu Linux 2.6.39) Identic cu CLOCK_MONOTONIC, cu excepia faptului ca include i timpul in care sistemul este suspendat. CLOCK_PROCESS_CPUTIME_ID Un ceas configurabil per proces care masoara timpul CPU consumat de toate firele din proces. Consultai clock_getres(2) pentru detalii suplimentare privind aceste ceasuri. In plus, ID-urile ceasurilor CPU returnate de clock_getcpuclockid(3) i pthread_getcpuclockid(3) pot fi transmise i in clockid. Daca flags este 0, atunci valoarea specificata in t este interpretata ca un interval relativ la valoarea curenta a ceasului specificat de clockid. Daca flags este TIMER_ABSTIME, atunci t este interpretat ca un timp absolut masurat de ceas, clockid. Daca t este mai mic sau egal cu valoarea curenta a ceasului, atunci clock_nanosleep() revine imediat fara a suspenda firul apelant. clock_nanosleep() suspenda execuia firului de execuie apelant pana cand fie a trecut cel puin timpul specificat de t, fie este transmis un semnal care determina apelarea unui gestionar de semnal sau terminarea procesului. Daca apelul este intrerupt de un gestionar de semnal, clock_nanosleep() eueaza cu eroarea EINTR. In plus, daca remain nu este NULL, iar flags nu a fost TIMER_ABSTIME, se returneaza timpul ramas nedormit in remain. Aceasta valoare poate fi apoi utilizata pentru a apela din nou clock_nanosleep() i a finaliza un somn (relativ). VALOAREA RETURNATA Dupa ce a reuit sa doarma pentru intervalul solicitat, clock_nanosleep() returneaza 0. Daca apelul este intrerupt de un gestionar de semnal sau detecteaza o eroare, atunci returneaza unul dintre numerele de eroare pozitive enumerate in ERORI-IEIRE. ERORI-IEIRE EFAULT t sau remain a specificat o adresa nevalida. EINTR Somnul a fost intrerupt de un gestionar de semnal; a se vedea signal(7). EINVAL Valoarea din campul tv_nsec nu era cuprinsa in intervalul [0, 999999999] sau tv_sec era negativa. EINVAL clockid nu a fost valid. CLOCK_THREAD_CPUTIME_ID nu este o valoare permisa pentru clockid. ENOTSUP Nucleul nu ofera suport pentru dormitul in raport cu acest clockid. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001. Linux 2.6, glibc 2.1. NOTE Daca intervalul specificat in t nu este un multiplu exact al gradului de finee care sta la baza ceasului (a se vedea time(7)), atunci intervalul va fi rotunjit la urmatorul multiplu. In plus, dupa finalizarea somnului, poate exista inca o intarziere pana cand CPU devine liber sa execute din nou firul apelant. Utilizarea unui temporizator absolut este utila pentru prevenirea problemelor de deriva a temporizatorului de tipul celor descrise in nanosleep(2). Astfel de probleme sunt exacerbate in programele care incearca sa reporneasca un somn relativ care este intrerupt in mod repetat de semnale. Pentru a efectua un somn relativ care evita aceste probleme, apelai clock_gettime(2) pentru ceasul dorit, adaugai intervalul dorit la valoarea de timp returnata i apoi apelai clock_nanosleep() cu fanionul TIMER_ABSTIME. clock_nanosleep() nu este niciodata repornit dupa ce a fost intrerupt de un gestionar de semnal, indiferent de utilizarea fanionului sigaction(2) SA_RESTART. Argumentul remain este neutilizat i inutil atunci cand flags este TIMER_ABSTIME; (un somn absolut poate fi repornit folosind acelai argument t). POSIX.1 specifica faptul ca clock_nanosleep() nu are niciun efect asupra dispoziiilor semnalelor sau a matii de semnal. POSIX.1 specifica faptul ca, dupa modificarea valorii ceasului CLOCK_REALTIME prin clock_settime(2), noua valoare a ceasului este utilizata pentru a determina momentul la care se va trezi un fir de execuie blocat pe un apel absolut clock_nanosleep(); daca noua valoare a ceasului depaete sfaritul intervalului de somn, apelul clock_nanosleep() va reveni imediat. POSIX.1 specifica faptul ca modificarea valorii ceasului CLOCK_REALTIME prin clock_settime(2) nu are niciun efect asupra unui fir care este blocat pe un clock_nanosleep() relativ. CONSULTAI I clock_getres(2), nanosleep(2), restart_syscall(2), timer_create(2), sleep(3), timespec(3), usleep(3), 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.12 23 iulie 2024 clock_nanosleep(2)