GETITIMER(2) Podręcznik programisty linuxowego GETITIMER(2)
NAZWA
getitimer, setitimer - pobierz lub ustaw wartość
wewnętrznego timera
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 zaopatrza każdy proces trzema timerami interwałów,
z których każdy inkrementuje się w innej domenie czasowej.
Gdy któryś z timerów ekspiruje, wysyłany jest sygnał do
procesu, a timer (potencjalnie) restartuje.
ITIMER_REAL dekrementuje w czasie rzeczywistym i
dostarcza SIGALRM podczas ekspiracji.
ITIMER_VIRTUAL dekrementuje tylko kiedy proces się
wykonuje i dostarcza SIGVTALRM podczas
ekspiracji.
ITIMER_PROF dekrementuje zarówno gdy proces się
wykonuje i kiedy system się wykonuje na
zlecenie procesu. W powiązaniu z
ITIMER_VIRTUAL, ten timer zwykle jest
używany do profilowania czasu używanego
przez aplikację w przestrzeni użytkownika i
kernela. SIGPROF jest dostarczany podczas
ekspiracji.
Wartości timera są zdefiniowane następującymi strukturami:
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 */
};
Getitimer(2) wypełnia strukturę wskazywaną przez value
obecnym wskazaniem timera wskazywanego przez which (jeden
z ITIMER_REAL, ITIMER_VIRTUAL, lub ITIMER_PROF). Element
it_value jest ustawiony na ilość czasu pozostającego
timerowi, lub zero jeśli timer jest wyłączony. Podobnie,
it_interval jest ustawiany na wartość resetową.
Setitimer(2) ustawia wskazany timer na wartość w value.
Jeśli ovalue jest niezerowe, stara wartość timera jest tam
zapisywana.
Timer dekrementuje z it_value do zera, generuje sygnał i
Linux 0.99.11 5 August 1993 1
GETITIMER(2) Podręcznik programisty linuxowego GETITIMER(2)
resetuje do it_interval. Timer, który jest ustawiony na
zero (it_value jest zerowe, lub timer ekspiruje, a
it_interval jest zerowe) zatrzymuje się.
Zarówno tv_sec jak i tv_usec są znaczące w określaniu
czasu trwania timera.
Timery nigdy nie ekspirują przed zadanym czasem, zamiast
tego ekspirują w krótkich, stałych okresach czasu,
zależnie od rozdzielczości timera systemowego (obecnie
10ms). Podczas ekspirowania generowany jest sygnał, a
timer jest resetowany. Jeśli timer ekspiruje podczas, gdy
proces jest aktywny (zawsze jest to prawda dla
ITIMER_VIRT) sygnał zostanie dostarczony natychmiast po
wygenerowaniu. W przeciwnym wypadku dostarczenie będzie
wydłużone o krótki czas, zależny od obciążenia systemu.
WARTOŚĆ ZWRACANA
Po sukcesie zwracane jest zero. Po błedzie, -1 i ustawiane
jest 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).
BŁĘDY
Pod linuxem, generowanie i dostarczanie sygnału są odległe
i każdy sygnał może być tylko jednym naraz. Dlatego pod
czas patologicznie dużego obciążenia ITIMER_REAL może
ekspirować wcześniej, niż sygnał poprzedniej ekspiracji
zostanie dostarczony. Drugi sygnał zostanie wtedy utra
cony.
Linux 0.99.11 5 August 1993 2