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