Provided by: manpages-de-dev_4.15.0-9_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 *restrictneuer_wert,
                     struct itimerval *restrictalter_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 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.13  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 ⟨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⟩.