Provided by: manpages-de-dev_1.4-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 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>.