Provided by:
manpages-pl-dev_20060617-1_all 
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)