.\" -*- coding: UTF-8 -*- .\" Copyright 7/93 by Darren Senn .\" and Copyright (C) 2016, Michael Kerrisk .\" Based on a similar page Copyright 1992 by Rick Faith .\" .\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE) .\" May be freely distributed and modified .\" %%%LICENSE_END .\" .\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond .\" 2005-04-06 mtk, Matthias Lang .\" Noted MAX_SEC_IN_JIFFIES ceiling .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETITIMER 2 "17. Juli 2016" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG getitimer, setitimer \- Zeit eines Intervall\-Zeitgebers abfragen oder setzen .SH ÜBERSICHT .nf \fB#include \fP .sp \fBint getitimer(int \fP\fIwelcher\fP\fB, struct itimerval *\fP\fIaktueller_wert\fP\fB);\fP .br \fBint setitimer(int \fP\fIwelcher\fP\fB,\fP \fB const struct itimerval *\fP\fIneuer_wert\fP\fB,\fP \fB struct itimerval *\fP\fIalter_wert\fP\fB);\fP .fi .SH BESCHREIBUNG Diese Systemaufrufe ermöglichen den Zugriff auf Intervall\-Zeitgeber, das sind Zeitgeber, die zuerst zu einem bestimmten Zeitpunkt in der Zukunft ablaufen und (optional) anschließend nach regelmäßigen Intervallen. Wenn ein Zeitgeber abläuft, wird ein Signal für den aufrufenden Prozess erzeugt und der Zeitgeber wird auf das angegebene Intervall zurückgesetzt (falls verschieden von Null). Es werden drei Arten von Zeitgebern – durch das Argument \fIwelcher\fP spezifiziert – zur Verfügung gestellt, von denen jeder gegen eine andere Uhr läuft und ein anderes Signal bei Ablauf erzeugt: .TP 1.5i \fBITIMER_REAL\fP Dieser Zeitgeber zählt in Echtzeit (im Sinne der tatsächlich vergangenen Zeit, »wall clock«) herunter. Bei jedem Ablauf wird ein Signal \fBSIGALRM\fP erzeugt. .TP \fBITIMER_VIRTUAL\fP Dieser Zeitgeber zählt gegen die Usermodus\-Prozessorzeit herunter, die vom Prozess verbraucht wird. (Die Messung beinhaltet die Prozessorzeit, die von allen Threads im Prozess verbraucht wird.) Bei jedem Ablauf wird ein Signal \fBSIGVTALRM\fP erzeugt. .TP \fBITIMER_PROF\fP Dieser Zeitgeber zählt gegen die Gesamt\-Prozessorzeit (d.h. sowohl Usermodus als auch Systemmodus) herunter, die vom Prozess verbraucht wird. (Die Messung beinhaltet die Prozessorzeit, die von allen Threads im Prozess verbraucht wird.) Bei jedem Ablauf wird ein Signal \fBSIGPROF\fP erzeugt. In Verbindung mit \fBITIMER_VIRTUAL\fP kann dieser Zeitgeber verwendet werden, um die Usermodus\- und Systemmodus\-Prozessorzeit zu messen, die vom Prozess verbraucht wird. .LP Ein Prozess hat nur jeweils einen dieser drei Arten von Zeitgebern. Zeitgeberwerte sind durch folgende Strukturen definiert: .PD 0 .in +4n .nf struct itimerval { struct timeval it_interval; /* Intervall für periodischen Zeitgeber */ struct timeval it_value; /* Zeit bis zum nächsten Ablauf */ }; struct timeval { time_t tv_sec; /* Sekunden */ suseconds_t tv_usec; /* Mikrosekunden */ }; .fi .in .PD .SS getitimer() Die Funktion \fBgetitimer\fP() platziert den aktuellen Wert des Zeitgebers \fIwelcher\fP in den Puffer, auf den \fIaktueller_wert\fP zeigt. Die Unterstruktur \fIit_value\fP wird mit der Restzeit gefüllt, die noch verbleibt, bevor der angegebene Zeitgeber das nächste Mal abläuft. Dieser Wert verändert sich, während der Zeitgeber herunterzählt und wird auf \fIit_interval\fP zurückgesetzt, wenn der Zeitgeber abläuft. Wenn beide Felder von \fIit_value\fP Null sind, dann ist dieser Zeitgeber gerade nicht scharfgeschaltet (inaktiv). Die Unterstruktur \fIit_interval\fP wird mit dem Zeitgeberintervall gefüllt. Wenn beide Felder von \fIit_interval\fP Null sind, dann ist dies ein einmaliger Zeitgeber (d.h., er läuft nur einmal ab). .SS setitimer() Die Funktion \fBsetitimer\fP() aktiviert oder deaktiviert den durch \fIwelcher\fP angegebenen Zeitgeber, indem der Zeitgeber auf den Wert gesetzt wird, der durch \fIneuer_wert\fP festgelegt wurde. Falls \fIalter_wert\fP nicht NULL ist, wird der Puffer, auf den gezeigt wird, zur Rückgabe des vorherigen Wertes des Zeitgebers verwendet (also die gleiche Information, die von \fBgetitimer\fP() zurückgegeben wird). Wenn eines der Felder in \fIneuer_wert.it_value\fP nicht Null ist, dann ist dieser Zeitgeber scharfgeschaltet, um initial zur angegebenen Zeit abzulaufen. Wenn beide Felder in \fIneuer_wert.it_value\fP Null sind, ist dieser Zeitgeber nicht scharfgeschaltet. Das Feld \fIneuer_wert.it_interval\fP legt das neue Intervall für den Zeitgeber fest; wenn beide Unterfelder Null sind, ist es ein einmaliger Zeitgeber. .SH RÜCKGABEWERT Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER .TP \fBEFAULT\fP \fIneuer_wert\fP, \fIalter_wert\fP oder \fIaktueller_wert\fP sind keine gültigen Zeiger. .TP \fBEINVAL\fP \fIwelcher\fP ist weder \fBITIMER_REAL\fP, \fBITIMER_VIRTUAL\fP noch \fBITIMER_PROF\fP oder (seit Linux 2.6.22) eines der \fItv_usec\fP\-Felder in der Struktur, auf die \fIneuer_wert\fP zeigt, enthält einen Wert, der außerhalb des Bereichs 0 bis 999999 liegt. .SH "KONFORM ZU" POSIX.1\-2001, SVr4, 4.4BSD (dieser Aufruf erschien erstmalig in 4.2BSD). POSIX.1\-2008 kennzeichnet \fBgetitimer\fP() und \fBsetitimer\fP() als veraltet und empfiehlt stattdessen die POSIX\-Zeitgeber\-API zu benutzen (\fBtimer_gettime\fP(2), \fBtimer_settime\fP(2), etc.). .SH ANMERKUNGEN 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 \fBtime\fP(7). (Siehe aber im Folgenden den Abschnitt FEHLER.) Falls ein Zeitgeber abläuft, während der Prozess aktiv ist (trifft für \fBITIMER_VIRTUAL\fP immer zu), wird das Signal sofort gesandt, wenn es generiert ist. Ein Kindprozess, der mittels \fBfork\fP(2) erzeugt wurde, erbt nicht die Intervall\-Zeitgeber seines Elternprozesses. Intervall\-Zeitgeber bleiben über ein \fBexecve\fP(2) erhalten. POSIX.1 beschreibt das Zusammenspiel zwischen \fBsetitimer\fP() und den drei Schnittstellen \fBalarm\fP(2), \fBsleep\fP(3) und \fBusleep\fP(3) nicht näher. Die Standards schweigen zu der Bedeutung des folgenden Aufrufs: setitimer(welcher, NULL, &alter_wert); Viele Systeme (Solaris, die BSDs und vielleicht andere) behandeln dies äquivalent zu Folgendem: getitimer(welcher, &alter_wert); Unter Linux wird dies als äquivalent zu einem Aufruf betrachtet, bei dem die Felder \fIneuer_wert\fP Null sind, das heißt, der Zeitgeber deaktiviert ist. \fIBenutzen Sie nicht diese ungünstige Linux\-Eigenschaft\fP: Sie ist nicht portierbar und unnötig. .SH 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 \fBITIMER_REAL\fP\-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 \fBMAX_SEC_IN_JIFFIES\fP übersteigt (in \fIinclude/linux/jiffies.h\fP 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. .\" 4 Jul 2005: It looks like this bug may remain in 2.4.x. .\" http://lkml.org/lkml/2005/7/1/165 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. .\" Bugzilla report 25 Apr 2006: .\" http://bugzilla.kernel.org/show_bug.cgi?id=6443 .\" "setitimer() should reject noncanonical arguments" Laut POSIX.1\-2001 sollte \fBsetitimer\fP() fehlschlagen, wenn ein \fItv_usec\fP\-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 \fItv_usec\fP\-Wert führt zu einem \fBEINVAL\fP\-Fehler. .SH "SIEHE AUCH" \fBgettimeofday\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBtimer_create\fP(2), \fBtimerfd_create\fP(2), \fBtime\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.09 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick , Helge Kreutzmann , Mario Blättermann und Dr. Tobias Quathamer 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 .