"Fossies" - the Fresh Open Source Software archive 
#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);
Zeitgeberwerte sind durch folgende Strukturen definiert:
struct itimerval
{
struct timeval it_interval; /* nächster Wert */
struct timeval it_value; /* aktueller Wert */
};
struct timeval
{
long tv_sec; /* Sekunden */
long 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.
POSIX.1 beschreibt das Zusammenspiel zwischen setitimer() und den drei Schnittstellen alarm(2), sleep(3) und usleep(3) nicht näher.
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.
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>.