Provided by: manpages-de-dev_2.5-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

       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 welcher spezifiziert – zur  Verfügung  gestellt,
       von denen jeder gegen eine andere Uhr läuft und ein anderes Signal bei Ablauf erzeugt:

       ITIMER_REAL    Dieser  Zeitgeber  zählt  in  Echtzeit  (im  Sinne der tatsächlich vergangenen Zeit, »wall
                      clock«) herunter. Bei jedem Ablauf wird ein Signal SIGALRM erzeugt.

       ITIMER_VIRTUAL 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 SIGVTALRM erzeugt.

       ITIMER_PROF    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 SIGPROF erzeugt.

                      In Verbindung mit ITIMER_VIRTUAL kann dieser Zeitgeber verwendet werden, um die Usermodus-
                      und Systemmodus-Prozessorzeit zu messen, die vom Prozess verbraucht wird.

       Ein Prozess hat nur jeweils einen dieser drei Arten von Zeitgebern.

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

   getitimer()
       Die Funktion getitimer() platziert den aktuellen Wert des Zeitgebers  welcher  in  den  Puffer,  auf  den
       aktueller_wert zeigt.

       Die  Unterstruktur  it_value  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 it_interval zurückgesetzt, wenn der Zeitgeber abläuft. Wenn beide Felder von it_value Null sind,
       dann ist dieser Zeitgeber gerade nicht scharfgeschaltet (inaktiv).

       Die Unterstruktur it_interval wird mit dem Zeitgeberintervall gefüllt. Wenn beide Felder von  it_interval
       Null sind, dann ist dies ein einmaliger Zeitgeber (d.h., er läuft nur einmal ab).

   setitimer()
       Die  Funktion  setitimer()  aktiviert oder deaktiviert den durch welcher angegebenen Zeitgeber, indem der
       Zeitgeber auf den Wert gesetzt wird, der durch neuer_wert festgelegt wurde. Falls alter_wert  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 getitimer() zurückgegeben wird).

       Wenn eines der Felder in neuer_wert.it_value nicht Null ist, dann ist dieser Zeitgeber  scharfgeschaltet,
       um  initial  zur  angegebenen  Zeit  abzulaufen.  Wenn beide Felder in neuer_wert.it_value Null sind, ist
       dieser Zeitgeber nicht scharfgeschaltet.

       Das Feld neuer_wert.it_interval legt das neue Intervall für den Zeitgeber fest;  wenn  beide  Unterfelder
       Null sind, ist es ein einmaliger Zeitgeber.

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) eines  der
              tv_usec-Felder  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

       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.) 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.

       Ein   Kindprozess,  der  mittels  fork(2)  erzeugt  wurde,  erbt  nicht  die  Intervall-Zeitgeber  seines
       Elternprozesses. Intervall-Zeitgeber bleiben über ein execve(2) erhalten.

       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(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 neuer_wert Null sind,
       das heißt, der Zeitgeber deaktiviert ist. Benutzen Sie nicht diese ungünstige Linux-Eigenschaft: Sie  ist
       nicht portierbar und unnötig.

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.15  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 https://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>,  Mario  Blättermann  <mario.blaettermann@gmail.com>  und  Dr.  Tobias
       Quathamer <toddy@debian.org> 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>.