getitimer

Autres langues

Langue: pl

Autres versions - même langue

Version: 1993-08-05 (openSuse - 09/10/07)

Section: 2 (Appels système)

NAZWA

getitimer, setitimer - pobranie i ustawienie warto¶ci czasomierza

SK£ADNIA

#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

OPIS

System zaopatruje ka¿dy proces w trzy czasomierze, z których ka¿dy odlicza czas siê w innej domenie czasowej. Gdy up³ynie czas wa¿no¶ci ustawiony dla którego¶ z czasomierzy, do procesu wysy³any jest sygna³, a czasomierz jest (potencjalnie) restartowany.
ITIMER_REAL
odlicza czas rzeczywisty i dostarcza SIGALRM po up³ywie czasu wa¿no¶ci.
ITIMER_VIRTUAL
odlicza czas wykonywania siê procesu i dostarcza SIGVTALRM po up³ywie czasu wa¿no¶ci.
ITIMER_PROF
odlicza zarówno czas wykonywania siê procesu, jak i czas wykonywania przez system zlecenie procesu. W powi±zaniu z ITIMER_VIRTUAL, ten czasomierz zwykle jest u¿ywany do parametryzowania czasu u¿ywanego przez aplikacjê zarówno w przestrzeni u¿ytkownika, jak i j±dra. Po up³ywie czasu wa¿no¶ci dostarczany jest SIGPROF.

Warto¶ci czasomierza s± zdefiniowane za pomoc± nastêpujych struktur:


struct itimerval {

    struct timeval it_interval; /* nastêpna warto¶æ */

    struct timeval it_value;    /* obecna warto¶æ */

};

struct timeval {

    long tv_sec;                /* sekundy */

    long tv_usec;               /* mikrosekundy */

};

Funkcja getitimer(2) wype³nia strukturê wskazywan± przez value aktualnym ustawieniem czasomierza wskazywanego przez which (jeden z ITIMER_REAL, ITIMER_VIRTUAL lub ITIMER_PROF). Do pola it_value jest wpisywana ilo¶æ czasu, który pozosta³ czasomierzowi lub zero, je¶li czasomierz jest wy³±czony. Podobnie, do it_interval jest wpisywana warto¶æ inicjalizacyjna. Funkcja setitimer(2) ustawia dla wskazanego czasomierza warto¶ci zawarte w value. Je¶li ovalue jest niezerowe, to jest tam zapisywana stara warto¶æ czasomierza.

Czasomierz odlicza od it_value do zera, generuje sygna³ i inicjalizuje siê na it_interval. Czasomierz ustawiony na zero (it_value jest zerowe, lub up³yn±³ czasu wa¿no¶ci czasomierza, a it_interval jest zerowe) zatrzymuje siê.

Przy okre¶laniu czasu dzia³ania czasomierza istotne s± zarówno tv_sec jak i tv_usec.

Wa¿no¶æ czasomierzy nigdy nie up³ywa przed zadanym czasem, natomiast dzieje siê to o krótki, sta³y czas, zale¿ny od rozdzielczo¶ci zegara systemowego (obecnie 10ms), pó¼niej. W chwili up³ywu czasu wa¿no¶ci generowany jest sygna³, a czasomierz jest resetowany. Je¶li czas wa¿no¶ci up³ywa, gdy proces jest aktywny (jest to zawsze prawda dla ITIMER_VIRT), to sygna³ zostanie dostarczony natychmiast po wygenerowaniu. W przeciwnym wypadku dostarczenie bêdzie opó¼nione o krótki okres czasu, zale¿ny od obci±¿enia systemu.

WARTO¦Æ ZWRACANA

Po pomy¶lnym zakoñczeniu zwracane jest zero. Po b³êdzie zwracane jest -1 i odpowiednio ustawiane errno.

B£ÊDY

EFAULT
value lub ovalue nie jest prawid³owym wska¼nikiem.
EINVAL
which nie jest jednym z ITIMER_REAL, ITIMER_VIRT lub ITIMER_PROF.

ZGODNE Z

SVr4, 4.4BSD (Ta funkcja pierwotnie pojawi³a siê w 4.2BSD).

ZOBACZ TAK¯E

gettimeofday(2), sigaction(2), signal(2)

USTERKI

Pod Linuksem, generowanie i dostarczanie sygna³u s± oddzielnymi zdarzeniami i dla ka¿dego sygna³u mo¿e byæ tylko jedno zaleg³e zdarzenie. Zatem mo¿liwe jest, ¿e podczas patologicznie du¿ego obci±¿enia czas wa¿no¶ci ITIMER_REAL mo¿e up³yn±æ wcze¶niej, ni¿ sygna³ poprzedniego przeterminowania zostanie dostarczony. Drugi sygna³ w takiej sytuacji zostanie utracony.