Provided by: manpages-de-dev_2.16-1_all bug

BEZEICHNUNG

       getitimer, setitimer - Zeit eines Intervall-Timers 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-Timer, das sind Timer (Zeitgeber), die zuerst
       zu einem bestimmten Zeitpunkt in der Zukunft  ablaufen  und  (optional)  anschließend  nach  regelmäßigen
       Intervallen.  Wenn  ein  Timer  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 Timern – 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  Timer  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 Timer 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 Timer  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 Timern.

       Timerwerte sind durch folgende Strukturen definiert:

           struct itimerval {
               struct timeval it_interval; /* Intervall für periodische Timer */
               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  Timers  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  Timer
       das  nächste  Mal  abläuft.  Dieser  Wert  verändert  sich,  während der Timer herunterzählt und wird auf
       it_interval zurückgesetzt, wenn der Timer abläuft. Wenn beide Felder von it_value  Null  sind,  dann  ist
       dieser Timer gerade nicht scharfgeschaltet (inaktiv).

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

   setitimer()
       Die  Funktion setitimer() aktiviert oder deaktiviert den durch welcher angegebenen Timer, indem der Timer
       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 Timers 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 Timer  scharfgeschaltet,  um
       initial  zur  angegebenen Zeit abzulaufen. Wenn beide Felder in neuer_wert.it_value Null sind, ist dieser
       Timer nicht scharfgeschaltet.

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

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-Timer-API zu benutzen
       (timer_gettime(2), timer_settime(2), etc.).

ANMERKUNGEN

       Timer laufen nie vor der angeforderten Zeit ab, könnten aber eine  (kurze)  Zeit  danach  ablaufen.  Dies
       hängt  von  der  Timerauflösung  des  Systems  und der Systemauslastung ab; siehe time(7). (Siehe aber im
       Folgenden den Abschnitt FEHLER.) Falls ein Timer 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-Timer  seines
       Elternprozesses. Intervall-Timer 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  Timer  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-Timer 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 Timerwerte in Jiffies dargestellt. Falls eine Anfrage zum Setzen des
       Timers    gemacht    wurde,    dessen    Jiffies-Entsprechung    MAX_SEC_IN_JIFFIES    übersteigt     (in
       include/linux/jiffies.h  definiert),  dann  wurde der Timer 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 Timer 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 Timerablä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 Timer 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  5.03  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 Helge Kreutzmann <debian@helgefjell.de>, Chris
       Leick <c.leick@vollbio.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>.

Linux                                          15. September 2017                                   GETITIMER(2)