nanosleep

Autres langues

Langue: pl

Autres versions - même langue

Version: 1996-04-10 (openSuse - 09/10/07)

Section: 2 (Appels système)

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)