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