NANOSLEEP(2)

NAZWA
nanosleep - zatrzymanie wykonywania na określony czas

SKŁADNIA
#include <time.h>

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

OPIS
Uwaga! To tłumaczenie może być nieaktualne!

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)

INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

    man --locale=C 2 nanosleep

Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages-pl/.