Provided by: manpages-fr-dev_3.57d1p1-1_all bug

NOM

       getitimer, setitimer - Lire/écrire la valeur d'une temporisation

SYNOPSIS

       #include <sys/time.h>

       int getitimer(int which, struct itimerval *curr_value);
       int setitimer(int which, const struct itimerval *new_value,
                     struct itimerval *old_value);

DESCRIPTION

       Le   système   fournit  pour  chaque  processus  trois  temporisations,  chacune  avec  un
       fonctionnement particulier. Lorsqu'une temporisation  expire,  un  signal  est  envoyé  au
       processus et la temporisation redémarre éventuellement.

       ITIMER_REAL    décroît  en  temps  réel  et  un  signal SIGALRM est émis à l'expiration du
                      délai.

       ITIMER_VIRTUAL décroît uniquement quand le processus s'exécute, et un signal SIGVTALRM est
                      émis à l'expiration du délai.

       ITIMER_PROF    décroît  à  la  fois  quand  le processus s'exécute, et quand le processeur
                      exécute  des  fonctions  systèmes  à  la  demande   du   processus.   Cette
                      temporisation, utilisée conjointement avec ITIMER_VIRTUAL, est généralement
                      utilisée  pour  obtenir  le  profil  d'exécution  du  processus  entre  les
                      fonctionnalités utilisateur et le noyau. SIGPROF est émis à l'expiration du
                      délai.

       Les valeurs des temporisations sont définies avec les structures suivantes :

           struct itimerval {
               struct timeval it_interval; /* valeur suivante */
               struct timeval it_value;    /* valeur actuelle */
           };

           struct timeval {
               time_t tv_sec;                /* secondes        */
               suseconds_t tv_usec;          /* microsecondes   */
           };

       La fonction getitimer() renseigne la structure pointée par curr_value avec le  paramétrage
       de la temporisation indiqué par which (parmi ITIMER_REAL, ITIMER_VIRTUAL, ou ITIMER_PROF).
       L'élément it_value est rempli avec le délai restant dans la temporisation, ou zéro  si  la
       temporisation est désactivée. De même, it_interval sera rempli avec la valeur originale de
       la temporisation.

       La fonction setitimer() positionne la temporisation avec  les  valeurs  de  new_value.  Si
       old_value n'est pas NULL, les paramètres précédents de la temporisation y sont inscrits.

       Les  temporisations  décroissent  de  it_value  à  zéro,  déclenchent  un  signal, et sont
       replacées à it_interval. Une temporisation s'arrête si elle est mise à zéro (it_value vaut
       zéro) ou bien elle expire et it_interval vaut zéro.

       Les  deux  champs  tv_sec  et  tv_usec  sont  utilisés  pour  déterminer  la  durée  d'une
       temporisation.

       Les temporisations n'expirent jamais avant la fin du temps requis, et expirent plutôt avec
       un  court  délai  après  la  limite.  Ce délai dépend de la résolution de la temporisation
       système et de la charge du système ; consultez time(7) (mais consultez la  section  BOGUES
       ci‐dessous).  À l'expiration, un signal est déclenché puis la temporisation réinitialisée.
       Si la  temporisation  expire  alors  que  le  processus  est  actif  (toujours  vrai  avec
       ITIMER_VIRTUAL)  le signal sera délivré immédiatement. Autrement, il y aura un petit délai
       avant réception du signal, dépendant de la charge du système.

VALEUR RENVOYÉE

       S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno  en
       conséquence.

ERREURS

       EFAULT new_value, old_value ou curr_value n'est pas un pointeur valable.

       EINVAL which  n'est  ni  ITIMER_REAL,  ni  ITIMER_VIRTUAL,  ni  ITIMER_PROF ;  ou  (depuis
              Linux 2.6.22) un des  champs  tv_usec  dans  la  structure  pointée  par  new_value
              contient une valeur hors de l'intervalle 0 à 999 999.

CONFORMITÉ

       POSIX.1-2001,  SVr4,  BSD 4.4  (cet  appel  est  apparu dans BSD 4.2). POSIX.1-2008 marque
       getitimer() et setitimer() comme étant obsolètes, en recommandant d'utiliser  à  la  place
       l'API des temporisations POSIX (timer_gettime(2), timer_settime(2), etc.).

NOTES

       Un  fils  créé  avec  fork(2) n'hérite pas des temporisations périodiques de son père. Les
       temporisations périodiques sont conservées au travers d'un execve(2).

       POSIX.1 laisse indéterminées  les  actions  entre  setitimer()  et  les  trois  interfaces
       alarm(2), sleep(3) et usleep(3).

       Les normes ne donnent pas la signification de l'appel :

           setitimer(which, NULL, &old_value);

       De  nombreux  systèmes d'exploitation (Solaris, les BSD et peut-être d'autres) le traitent
       comme étant équivalent à :

           getitimer(which, &old_value);

       Dans Linux, il est traité comme étant équivalent à un appel  dans  lequel  les  champs  de
       new_value  sont  égaux  à  zéro,  ce  qui  correspondrait  à une temporisation désactivée.
       N'utilisez pas cette non-fonctionnalité de Linux : elle est non portable et inutile.

BOGUES

       Sous Linux, l'émission et la réception d'un signal sont distincts, et un  même  signal  ne
       peut  pas  être  émis  deux  fois  de  suite  si le premier n'a pas été reçu. Il est ainsi
       possible qu'avec une charge système très  élevée,  une  temporisation  ITIMER_REAL  expire
       avant  que  le  signal  d'une  expiration précédente n'ait été reçu. Le second signal sera
       alors perdu.

       Sous les noyaux Linux antérieurs au 2.6.16, les valeurs des temporisations sont  exprimées
       en  « jiffies ». Si une temporisation est initialisée à une valeur en jiffies dépassant la
       constante MAX_SEC_IN_JIFFIES (définie dans include/linux/jiffies.h), la temporisation  est
       silencieusement  tronquée  à  cette  valeur  maximale.  Sous  Linux  sur  i386 (où, depuis
       Linux 2.6.13, un jiffy correspond par défaut à 4  millisecondes),  cela  signifie  que  la
       valeur maximale d'une temporisation est environ 99,42 jours. Depuis Linux 2.6.16, le noyau
       utilise une représentation interne du temps différente et le plafond est supprimé.

       Sur certains systèmes (y compris i386), les noyaux Linux avant la version  2.6.12  ont  un
       bogue  qui  cause  des  expirations  prématurées de temporisation, avec une avance pouvant
       aller jusqu'à un jiffy dans certaines circonstances.  Ce  bogue  est  corrigé  dans  Linux
       2.6.12.

       Selon  POSIX.1-2001, setitimer() devrait échouer si la valeur de tv_usec fournie n'est pas
       entre 0 et 999999. Cependant, dans les noyaux de version inférieure  ou  égale  à  2.6.21,
       Linux   ne   renvoie   pas  d'erreur,  et  se  contente  d'ajuster  la  valeur  de  tv_sec
       correspondante. Depuis le noyau 2.6.22, cette non conformité a été corrigée ;  une  valeur
       non valable de tv_usec résulte en une erreur EINVAL.

VOIR AUSSI

       gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), time(7)

COLOPHON

       Cette  page  fait partie de la publication 3.57 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».