Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
getitimer, setitimer - Zeit eines Intervall-Zeitgebers abfragen oder
setzen
"UBERSICHT
#include <sys/time.h>
int getitimer(int welcher, struct itimerval *aktueller wert);
int setitimer(int welcher,
const struct itimerval *neuer_wert,
struct itimerval *alter_wert);
BESCHREIBUNG
Das System stellt jedem Prozess drei Intervall-Zeitgeber zur Verfugung,
die in verschiedenen Zeitdomanen herunterzahlen. Wenn der Zeitgeber
ablauft, wird ein Signal an den Prozess gesandt und der Zeitgeber
startet (moglicherweise) von vorne.
ITIMER_REAL zahlt in Echtzeit zuruck und liefert bei Ablauf SIGALRM.
ITIMER_VIRTUAL zahlt nur zuruck, wenn der Prozess ausgefuhrt wird und
liefert bei Ablauf SIGVTALRM.
ITIMER_PROF zahlt sowohl zuruck, wenn der Prozess ausgefuhrt wird
als auch, wenn das System fur den Prozess tatig ist.
Zusammen mit ITIMER_VIRTUAL kann dieser Zeitgeber
ermitteln, wie lange eine Applikation sich im Benutzer-
und im Kernel-Adressraum aufhalt. Bei Ablauf wird
SIGPROF geliefert.
Zeitgeberwerte sind durch folgende Strukturen definiert:
struct itimerval
{
struct timeval it_interval; /* nachster Wert */
struct timeval it_value; /* aktueller Wert */
};
struct timeval
{
long tv_sec; /* Sekunden */
long tv_usec; /* Mikrosekunden */
};
Die Funktion getitimer() fullt die Struktur auf die aktueller_wert
zeigt mit der aktuellen Einstellung fur den durch welcher angegebenen
Zeitgeber (ITIMER_REAL, ITIMER_VIRTUAL oder ITIMER_PROF). Das Element
it_value wird auf den Betrag der Zeit gesetzt, die auf dem Zeitgeber
verblieben ist oder Null, wenn der Zeitgeber ausgeschaltet ist.
GleichermaBen wird it_interval auf den Rucksetzwert gesetzt.
Die Funktion setitimer() setzt den angegebenen Zeitgeber auf den Wert
in neuer_wert. Falls alter_wert nicht NULL ist, wird der alte Wert
dieses Zeitgebers dort gespeichert.
Zeitgeber zahlen von it_value bis Null herunter, generieren ein Signal
und werden auf it_interval zuruckgesetzt. Ein Zeitgeber,der auf Null
gesetzt ist (it_value ist Null oder der Zeitgeber lauft ab und
it_interval ist Null), stoppt.
Sowohl tv_sec als auch tv_usec sind fur das Festlegen der Dauer eines
Zeitgebers von maBgeblich.
Zeitgeber laufen nie vor der angeforderten Zeit ab, konnten aber eine
(kurze) Zeit danach ablaufen. Dies hangt von der Zeitgeberauflosung des
Systems und der Systemauslastung ab; siehe time(7). (Siehe aber im
Folgenden den Abschnitt FEHLER.) Bei Ablauf wird ein Signal generiert
und der Zeitgeber wird zuruckgesetzt. Falls ein Zeitgeber ablauft,
wahrend der Prozess aktiv ist (trifft fur ITIMER_VIRTUAL immer zu),
wird das Signal sofort gesandt, wenn es generiert ist. Andernfalls wird
das Senden ein wenig verzogert, abhangig von der Systemauslastung.
R"UCKGABEWERT
Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1
zuruckgegeben und errno entsprechend gesetzt.
FEHLER
EFAULT neuer_wert, alter_wert oder aktueller_wert sind keine gultigen
Zeiger.
EINVAL welcher ist weder ITIMER_REAL, ITIMER_VIRTUAL noch ITIMER_PROF
oder (seit Linux 2.6.22) einer der tv_usec-Felder in in der
Struktur, auf die neuer_wert zeigt, enthalt einen Wert, der
auBerhalb des Bereichs 0 bis 999999 liegt.
KONFORM ZU
POSIX.1-2001, SVr4, 4.4BSD (dieser Aufruf erschien erstmalig in
4.2BSD). POSIX.1-2008 kennzeichnet getitimer() und setitimer() als
veraltet und empfiehlt stattdessen die POSIX-Zeitgeber-API zu benutzen
(timer_gettime(2), timer_settime(2), etc.).
ANMERKUNGEN
Ein Kindprozess, der mittels fork(2) erzeugt wurde. erbt nicht die
Intervall-Zeitgeber seines Elternprozesses. Intervall-Zeitgeber werden
uber ein execve(2) konserviert.
POSIX.1 beschreibt das Zusammenspiel zwischen setitimer() und den drei
Schnittstellen alarm(2), sleep(3) und usleep(3) nicht naher.
FEHLER
Das Generieren und Senden eines Signals sind eigenstandig und nur eine
Instanz von jedem der oben aufgelisteten Signale kann fur einen Prozess
anstehen. Unter sehr hoher Systemlast kann ein ITIMER_REAL-Zeitgeber
ablaufen bevor das Signal von einem vorherigen Ablauf geliefert wurde.
Das zweite Signal geht bei einem solchen Ereignis verloren.
Auf Linux-Kerneln vor 2.6.16 wurden Zeitgeberwerte in Jiffies
dargestellt. Falls eine Anfrage zum Setzen des Zeitgebers gemacht
wurde, dessen Jiffies-Entsprechung MAX_SEC_IN_JIFFIES ubersteigt (in
include/linux/jiffies.h definiert), dann wurde der Zeitgeber
stillschweigend auf diese Obergrenze gekurzt. Auf Linux/i386 (wobei
seit Linux 2.6.13 der Standard-Jiffy 0,004 Sekunden entspricht),
bedeutet dies, dass die Obergrenze fur einen Zeitgeber zirka 99,42
Tagen entspricht. Seit Linux 2.6.16 benutzt der Kernel eine andere
interne Entsprechung fur Zeiten und diese Obergrenze wurde entfernt.
Auf bestimmten Systemen (einschlieBlich i386) haben Linux-Kernel vor
2.6.12 einen Fehler, der unter Umstanden vorzeitige Zeitgeberablaufe
von bis zu einem Jiffy produziert. Dieser Fehler wurde in Kernel 2.6.12
behoben.
Laut POSIX.1-2001 sollte setitimer() fehlschlagen, wenn ein
tv_usec-Wert angegeben wurde, der auBerhalb des Bereichs 0 bis 999999
liegt. In Kerneln bis einschlieBlich 2.6.21 gibt Linux jedoch keinen
Fehler zuruck, sondern passt stattdessen stillschweigend den
Sekundenwert fur den Zeitgeber an. Ab Kernel 2.6.22 aufwarts wurde
dieser Fehler behoben: Ein unpassender tv_usec-Wert fuhrt zu einem
EINVAL-Fehler.
SIEHE AUCH
gettimeofday(2), sigaction(2), signal(2), timer_create(2),
timerfd_create(2), time(7)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick
<c.leick@vollbio.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.
Linux 15. Marz 2009 GETITIMER(2)