Provided by:
manpages-pl-dev_20051117-1_all 
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.