Provided by: manpages-de-dev_1.11-1_all bug

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 ein Zeitgeber abläuft, wird ein  Signal  an
       den  Prozess  gesandt  und  der  Zeitgeber wird auf das angegebene Intervall zurückgesetzt
       (falls verschieden von Null).

       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; /* 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 */
           };

       Die Funktion getitimer() füllt  die  Struktur,  auf  die  aktueller_wert  zeigt,  mit  der
       aktuellen  Einstellung  für  den  durch welcher angegebenen Zeitgeber, d.h. der Betrag der
       verbleibenden Zeit bis zum nächsten Ablauf (ITIMER_REAL, ITIMER_VIRTUAL oder ITIMER_PROF).
       Die  Unterelemente  des  Elements it_value werden auf den Betrag der Zeit gesetzt, die auf
       dem Zeitgeber verblieben sind, oder auf Null, wenn der Zeitgeber  ausgeschaltet  ist.  Das
       Feld  it_interval  wird  auf  den  Zeitintervall  gesetzt  (die  Periode); wird in (beiden
       Unterfeldern dieses Subfeldes) ein Wert von Null zurückgegeben,  bedeutet  dies,  dass  es
       sich um einen einmalig auszulösenden Zeitgeber handelt.

       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  (also  die  gleiche
       Information, die von getitimer() zurückgegeben wird) 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

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.04  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick <c.leick@vollbio.de>,
       Helge      Kreutzmann       <debian@helgefjell.de>       und       Mario       Blättermann
       <mario.blaettermann@gmail.com> 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>.