Provided by: manpages-de-dev_1.4-1_all 

BEZEICHNUNG
getitimer, setitimer - Zeit eines Intervall-Zeitgebers abfragen oder setzen
ÜBERSICHT
#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 Verfügung, die in verschiedenen Zeitdomänen
herunterzählen. Wenn der Zeitgeber abläuft, wird ein Signal an den Prozess gesandt und der Zeitgeber
startet (möglicherweise) von vorne.
ITIMER_REAL zählt in Echtzeit zurück und liefert bei Ablauf SIGALRM.
ITIMER_VIRTUAL zählt nur zurück, wenn der Prozess ausgeführt wird und liefert bei Ablauf SIGVTALRM.
ITIMER_PROF zählt sowohl zurück, wenn der Prozess ausgeführt wird als auch, wenn das System für den
Prozess tätig ist. Zusammen mit ITIMER_VIRTUAL kann dieser Zeitgeber ermitteln, wie lange
eine Applikation sich im Benutzer- und im Kernel-Adressraum aufhält. Bei Ablauf wird
SIGPROF geliefert.
Zeitgeberwerte sind durch folgende Strukturen definiert:
struct itimerval
{
struct timeval it_interval; /* nächster Wert */
struct timeval it_value; /* aktueller Wert */
};
struct timeval
{
time_t tv_sec; /* Sekunden */
suseconds_t tv_usec; /* Mikrosekunden */
};
Die Funktion getitimer() füllt die Struktur auf die aktueller_wert zeigt mit der aktuellen Einstellung
für 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. Gleichermaßen wird it_interval auf den Rücksetzwert 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 zählen von it_value bis Null herunter, generieren ein Signal und werden auf it_interval
zurückgesetzt. Ein Zeitgeber,der auf Null gesetzt ist (it_value ist Null oder der Zeitgeber läuft ab und
it_interval ist Null), stoppt.
Sowohl tv_sec als auch tv_usec sind für das Festlegen der Dauer eines Zeitgebers von maßgeblich.
Zeitgeber laufen nie vor der angeforderten Zeit ab, könnten aber eine (kurze) Zeit danach ablaufen. Dies
hängt von der Zeitgeberauflösung 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
zurückgesetzt. Falls ein Zeitgeber abläuft, während der Prozess aktiv ist (trifft für ITIMER_VIRTUAL
immer zu), wird das Signal sofort gesandt, wenn es generiert ist. Andernfalls wird das Senden ein wenig
verzögert, abhängig von der Systemauslastung.
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend
gesetzt.
FEHLER
EFAULT neuer_wert, alter_wert oder aktueller_wert sind keine gültigen 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, enthält einen Wert, der außerhalb 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 über ein execve(2) konserviert.
POSIX.1 beschreibt das Zusammenspiel zwischen setitimer() und den drei Schnittstellen alarm(2), sleep(3)
und usleep(3) nicht näher.
Die Standards schweigen zu der Bedeutung des folgenden Aufrufs:
setitimer(which, NULL, &alter_wert);
Viele Systeme (Solaris, die BSDs und vielleicht andere) behandeln dies zu folgendem äquivalent:
getitimer(which, &alter_wert);
Unter Linux wird dies als äquivalent zu einem Aufruf betrachtet, bei dem die Felder neuer_wert Null sind,
das heißt, der Zeitgeber deaktiviert ist. Benutzen Sie nicht diese ungünstige Linux-Eigenschaft: Sie ist
unnötig und nicht portierbar.
FEHLER
Das Generieren und Senden eines Signals sind eigenständig und nur eine Instanz von jedem der oben
aufgelisteten Signale kann für 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 übersteigt (in
include/linux/jiffies.h definiert), dann wurde der Zeitgeber stillschweigend auf diese Obergrenze
gekürzt. Auf Linux/i386 (wobei seit Linux 2.6.13 der Standard-Jiffy 0,004 Sekunden entspricht), bedeutet
dies, dass die Obergrenze für einen Zeitgeber zirka 99,42 Tagen entspricht. Seit Linux 2.6.16 benutzt der
Kernel eine andere interne Entsprechung für Zeiten und diese Obergrenze wurde entfernt.
Auf bestimmten Systemen (einschließlich i386) haben Linux-Kernel vor 2.6.12 einen Fehler, der unter
Umständen vorzeitige Zeitgeberabläufe 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 außerhalb
des Bereichs 0 bis 999999 liegt. In Kerneln bis einschließlich 2.6.21 gibt Linux jedoch keinen Fehler
zurück, sondern passt stattdessen stillschweigend den Sekundenwert für den Zeitgeber an. Ab Kernel 2.6.22
aufwärts wurde dieser Fehler behoben: Ein unpassender tv_usec-Wert führt zu einem EINVAL-Fehler.
SIEHE AUCH
gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), time(7)
KOLOPHON
This page is part of release 3.54 of the Linux man-pages project. A description of the project, and
information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick <c.leick@vollbio.de> und Helge
Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
Linux 1. Oktober 2012 GETITIMER(2)