Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       nanosleep - zatrzymanie wykonywania na określony czas

SKŁADNIA

       #include <time.h>

       int nanosleep(const struct timespec *req, struct timespec *rem);

OPIS

       nanosleep  opóźnia  wykonywanie  programu  przynajmniej o czas podany w
       *req.   Funkcja  może  zakończyć   się   wcześniej,   jeśli   procesowi
       dostarczono  sygnał.  W tym wypadku zwraca -1, ustawia errno na wartość
       EINTR i zapisuje pozostały czas do do struktury wskazywanejj przez rem,
       o  ile  rem  nie  było  równe  NULL.  Wartość *rem można wykorzystać do
       ponownego wywołania nanosleep i dokończenia zadanej pauzy.

       Do podawania interwałów czasowych z dokładnością nanosekundową, używana
       jest struktura timespec, zdefiniowana w <time.h>, a mająca postać

              struct timespec
              {
                      time_t  tv_sec;         /* sekundy */
                      long    tv_nsec;        /* nanosekundy */
              };

       Wartość pola nanosekund musi być w zakresie od 0 do 999 999 999.

       W  porównaniu  ze sleep(3) i usleep(3), nanosleep jest lepsze, gdyż nie
       wpływają na nie sygnały i jest zestandaryzowane  przez  POSIX.  Ponadto
       daje  lepszą  rozdzielczość czasową i pozwala na łatwiejszą kontynuację
       uśpienia po przerwaniu przez sygnał.

BŁĘDY

       W wypadku błędu, lub wyjątku, nanosleep zwraca zamiast 0 wartość  -1  i
       ustawia errno na jedną z następujących wartości:

       EINTR  Pauza  została  przerwana  nieblokowanym  sygnałem, dostarczonym
              procesowi.  Pozostały czas pauzy został zapisany do  *rem,  więc
              proces  może łatwo wywołać ponownie nanosleep i dokończyć pauzę.

       EINVAL Wartość z pola tv_nsec nie była w zakresie 0 to 999 999 999  lub
              tv_sec było ujemne.

USTERKI

       Obecna  implementacja nanosleep jest oparta o mechanizm zwykłego zegara
       w jądrze, którego rozdzielczość wynosi 1/HZ s  (np.,  dla  Linuksa/i386
       10 ms i 1 ms dla Linuksa/Alpha).  Tak więc nanosleep przerywa wykonanie
       zawsze  przynajmniej  na  zadany  czas,  choć  może  wznowić  działanie
       programu  do  10ms  później  niż podano. Z tej samej przyczyny, wartość
       zwracana w *rem  przy  pojawieniu  się  sygnału,  jest  zaokrąglana  do
       wielokrotności 1/HZ s.

       Jako,  że niektóre aplikacje wymagają bardziej dokładnych pauz (np. aby
       sterować sprzętem o  krytycznych  zależnościach  czasowych),  nanosleep
       może  też  dawać  krótkie,  bardzo dokładne pauzy. Jeśli proces podlega
       szeregowaniu zadań według  polityki  czasu  rzeczywistego,  takiej  jak
       SCHED_FIFO  czy  SCHED_RR,  to wtedy pauzy do 2 ms będą wykonywane jako
       oczekiwania zajętości (busy waits) z precyzją mikrosekundową.

ZGODNE Z

       POSIX.1b (poprzednio POSIX.4)

ZOBACZ TAKŻE

       sleep(3), usleep(3), sched_setscheduler(2), timer_create(2)