Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

       getitimer, setitimer - Zeit eines Intervall-Timers abfragen oder setzen

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/time.h>

       int getitimer(int welcher, struct itimerval *aktueller_wert);
       int setitimer(int welcher, const struct itimerval *restrict neuer_wert,
                     struct itimerval *_Nullable restrict 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 Timer
       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  Timer  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  gesetzt,  um  den
       Fehler anzuzeigen.

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, 999999] liegt.

VERSIONEN

       Die Standards schweigen zu der Bedeutung des folgenden Aufrufs:

           setitimer(which, NULL, &alter_wert);

       Viele Systeme (Solaris, die BSDs und vielleicht andere) behandeln dies äquivalent zu Folgendem:

           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  Timer  deaktiviert  ist. Benutzen Sie nicht diese ungünstige Linux-Eigenschaft: Sie ist
       nicht portierbar und unnötig.

STANDARDS

       POSIX.1-2008.

GESCHICHTE

       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.

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.

       Vor Linux 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 Linux  2.6.12
       behoben.

       Laut  POSIX.1-2001  sollte setitimer() fehlschlagen, wenn ein tv_usec-Wert angegeben wurde, der außerhalb
       des Bereichs [0, 999999] liegt. Unter Linux 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 Linux 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)

Ü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 die
       Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                              2. Mai 2024                                      getitimer(2)