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)
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/.