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

NUME

       nanosleep - somn de înaltă rezoluție

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <time.h>

       int nanosleep(const struct timespec *duration,
                     struct timespec *_Nullable rem);

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

       nanosleep():
           _POSIX_C_SOURCE >= 199309L

DESCRIERE

       nanosleep()  suspendă  execuția  firului  apelant  până  când  se  scurge  cel puțin timpul specificat în
       *duration sau până la livrarea unui semnal care declanșează invocarea unui gestionar în firul apelant sau
       care termină procesul.

       În cazul în care apelul este întrerupt de un gestionar de semnal, nanosleep() returnează  -1,  stabilește
       errno  la  EINTR și scrie timpul rămas în structura indicată de rem, cu excepția cazului în care rem este
       NULL. Valoarea lui *rem poate fi apoi utilizată pentru a apela din nou nanosleep() și pentru  a  finaliza
       pauza specificată (dar vedeți secțiunea NOTE).

       Structura timespec(3) este utilizată pentru a specifica intervale de timp cu o precizie de o nanosecundă.

       Valoarea câmpului nanosecunde trebuie să fie cuprinsă în intervalul [0, 999999999].

       În  comparație cu sleep(3) și usleep(3), nanosleep() are următoarele avantaje: oferă o rezoluție mai mare
       pentru specificarea intervalului de somn; POSIX.1 specifică în mod  explicit  că  nu  interacționează  cu
       semnalele; și facilitează sarcina de reluare a unui somn care a fost întrerupt de un gestionar de semnal.

VALOAREA RETURNATĂ

       În  cazul  în care se reușește să doarmă pentru durata de timp solicitată, nanosleep() returnează 0. Dacă
       apelul este întrerupt de un gestionar de semnal sau întâmpină o eroare, atunci returnează  -1,  cu  errno
       configurată pentru a indica eroarea.

ERORI-IEȘIRE

       EFAULT Problemă cu copierea informațiilor din spațiul utilizatorului.

       EINTR  Pauza  a  fost întreruptă de un semnal care a fost transmis firului (a se vedea signal(7)). Timpul
              de somn rămas a fost scris în *rem, astfel  încât  firul  să  poată  apela  din  nou  cu  ușurință
              nanosleep() și să continue cu pauza.

       EINVAL Valoarea din câmpul tv_nsec nu era cuprinsă în intervalul [0, 999999999] sau tv_sec era negativă.

VERSIUNI

       POSIX.1  specifică faptul că nanosleep() trebuie să măsoare timpul în raport cu ceasul CLOCK_REALTIME. Cu
       toate acestea, Linux măsoară timpul folosind ceasul CLOCK_MONOTONIC. Probabil că acest lucru nu contează,
       deoarece specificația POSIX.1 pentru clock_settime(2) spune că modificările discontinue în CLOCK_REALTIME
       nu ar trebui să afecteze nanosleep():

              Fixarea valorii ceasului CLOCK_REALTIME prin clock_settime(2) nu are niciun efect  asupra  firelor
              care sunt blocate în așteptarea unui serviciu de timp relativ bazat pe acest ceas, inclusiv asupra
              funcției  nanosleep();  ...  În  consecință,  aceste  servicii de cronometrare expiră la expirarea
              duratei solicitate, indiferent de valoarea nouă sau veche a ceasului.

STANDARDE

       POSIX.1-2008.

ISTORIC

       POSIX.1-2001.

       Pentru a sprijini aplicațiile care necesită pauze mult mai precise (de exemplu, pentru a controla anumite
       echipamente hardware cu timp critic), nanosleep() ar putea gestiona pauze de până la 2  milisecunde  prin
       așteptare  ocupată  cu  precizie de microsecunde atunci când este apelat de un fir programat conform unei
       politici de timp real precum SCHED_FIFO sau SCHED_RR. Această extensie specială a fost eliminată în Linux
       2.5.39 și, prin urmare, nu este disponibilă în Linux 2.6.0 și în nucleele ulterioare.

NOTE

       În cazul în care intervalul specificat în duration (durata) nu este un multiplu exact  al  granularității
       (fineții)  ceasului de bază (a se vedea time(7)), atunci intervalul va fi rotunjit la următorul multiplu.
       În plus, după ce se termină somnul, este posibil să mai existe o întârziere până când  CPU  devine  liber
       pentru a executa din nou firul de apelare.

       Faptul  că  nanosleep() doarme pentru un interval relativ poate fi problematic dacă apelul este reluat în
       mod repetat după ce a fost întrerupt de semnale, deoarece timpul dintre întreruperi și reluarea  apelului
       va  duce  la  o  derivă în momentul în care somnul se termină în cele din urmă. Această problemă poate fi
       evitată prin utilizarea clock_nanosleep(2) cu o valoare absolută a timpului.

ERORI

       Dacă un program care captează semnale și utilizează nanosleep() primește semnale la o rată  foarte  mare,
       atunci întârzierile de programare și erorile de rotunjire în calcularea de către nucleu a intervalului de
       somn  și  a  valorii  remain  returnate  înseamnă  că  valoarea remain poate crește constant la reporniri
       succesive ale apelului nanosleep(). Pentru a evita astfel de probleme,  utilizați  clock_nanosleep(2)  cu
       fanionul TIMER_ABSTIME pentru a dormi la un termen limită absolut.

       În  Linux  2.4,  dacă nanosleep() este oprit de un semnal (de exemplu, SIGTSTP), atunci apelul eșuează cu
       eroarea EINTR după ce firul este reluat de un  semnal  SIGCONT.  Dacă  apelul  de  sistem  este  repornit
       ulterior, atunci timpul pe care firul l-a petrecut în starea de oprire nu este contabilizat în intervalul
       de așteptare. Această problemă este rezolvată în Linux 2.6.0 și în nucleele ulterioare.

CONSULTAȚI ȘI

       clock_nanosleep(2),  restart_syscall(2),  sched_setscheduler(2),  timer_create(2), sleep(3), timespec(3),
       usleep(3), 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                                       nanosleep(2)