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

BEZEICHNUNG

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

       Zeitgeberwerte sind durch folgende Strukturen definiert:

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

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

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

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

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

ANMERKUNGEN

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