www.digipedia.pl - manuale

NANOSLEEP(2)

NANOSLEEP(2) Podręcznik programisty Linuksa NANOSLEEP(2)
Hey Emacs! This file is -*- nroff -*- source.
 
1999 PTM Przemek Borys Last update: A. Krzysztofowicz <ankry@mif.pg.gda.pl>, Jan 2002, manpages 1.47
 
Copyright (C) Markus Kuhn, 1996
 
This is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
 
The GNU General Public License's references to "object code" and "executables" are to be interpreted as the output of any document formatting or typesetting system, including intermediate and printed output.
 
This manual is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License along with this manual; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 
1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de> First version written
 

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

1996-04-10 Linux 1.3.85