Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
BEZEICHNUNG
getitimer, setitimer - holt/setzt Zeit eines Intervall-Timers
ÜBERSICHT
#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct
itimerval *ovalue);
BESCHREIBUNG
Das System stellt jedem Prozess drei Intervall-Timer zur Verfügung, die
in unterschiedlichen Prozesszuständen bis Null herabzählen. Wenn der
Timer Null erreicht, wird ein Signal an den Prozess geliefert und der
Timer startet (möglicherweise) von vorne.
ITIMER_REAL zählt die tatsächlich laufende Zeit und liefert SIGALRM
wenn die Null erreicht wurde.
ITIMER_VIRTUAL zählt nur, wenn der Prozess ausgeführt wird und liefert
SIGVTALRM wenn die Null erreicht wurde.
ITIMER_PROF zählt sowohl, wenn der Prozess Rechnerzeit beansprucht,
als auch, wenn das System für den Prozess tätig ist.
Zusammen mit ITIMER_VIRTUAL, kann man so ermitteln, wie
lange eine Applikation sich im User- und im
Kernelprogrammraum aufhält. Wenn der Zähler abgelaufen
ist, wird SIGPROF geliefert.
Die Timerwerte sind durch folgende Strukturen definiert:
struct itimerval
{
struct timeval it_interval; /* nächster Timerwert */
struct timeval it_value; /* dieser Timerwert */
};
struct timeval
{
long tv_sec; /* Sekunden */
long tv_usec; /* Mikrosekunden */
};
Getitimer(2) füllt die Struktur value mit den aktuellen Werten des
Timers, den which angibt, was ITIMER_REAL, ITIMER_VIRTUAL, oder
ITIMER_PROF) sein kann. The element it_value wird auf die Zeit
gesetzt, die noch verbleibt oder auf Null, wenn der Timer nicht aktiv
ist. Analog wird it_interval auf den Resetwert gesetzt.
Setitimer(2) setzt den angegebenen Timer auf den Wert, der in value
referenziert wird. Falls ovalue nicht Null ist, wird der alte Wert
dort abgelegt.
Timer werden von it_value dekrementiert bis Null erreicht wird, es wird
ein Signal ausgelöst und der Timer wird auf den Beginn des Intervalls
it_interval zurückgesetzt. Ein Timer, der auf Null gesetzt wird
(it_value ist Null oder der Timer läuft ab und it_interval wird auf
Null gesetzt) terminiert.
Timer laufen nie vor der angeforderten Zeit ab, sondern eher eine
konstant kurze Zeitspanne später. Die Größe der Zeitspanne hängt von
der Auflösung des Timer ab (aktuell 10ms). Bei Ablauf wird ein Signal
erzeugt und der Timer beginnt von neuem. Wenn das Signal ausgelöst
wird, wenn der Prozess aktiv ist (das ist bei ITIMER_VIRT stets der
Fall), wird das Signal augenblicklich ausgeliefert. Andernfalls wird
das Signal etwas später ausgeliefert, was von der Belastung der
Maschine abhängen kann.
RÜCKGABEWERT
Bei Erfolg wird Null geliefert, bei aufgetretenem Fehler wird -1
geliefert und errno wird entsprechend gesetzt.
FEHLER
EFAULT value oder ovalue sind keine gültigen Pointer.
EINVAL which ist weder ITIMER_REAL noch ITIMER_VIRT noch
ITIMER_PROF.
BUGS
Unter Linux ist der Zeitpunkt der Auslösung des Signals vom Zeitpunkt
der Auslieferung verschieden und es existiert keine Warteschlange. Das
bedeutet, dass unter unbeschreiblich starker Belastung es denkbar ist,
dass ITIMER_REAL abläuft, bevor das Signal des vorigen Ablaufs des
Timers ausgeliefert wurde. Das zweite Signal wird verloren.
SIEHE AUCH
gettimeofday(2), sigaction(2), signal(2).