Provided by: manpages-de-dev_4.23.1-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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.