GETITIMER(2)

NOM
getitimer, setitimer - Lire / ecrire la valeur d'une temporisation.

SYNOPSIS
#include <sys/time.h>

int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

DESCRIPTION
Le systeme fournit pour chaque processus trois temporisations, chacune avec un fonctionnement particulier. Lorsqu'une temporisation expire, un signal est envoye au processus et la temporisation redemarre eventuellement.

ITIMER_REAL
    decroit en temps reel et un signal SIGALRM est emis a l'expiration du delai.

ITIMER_VIRTUAL
    decroit uniquement quand le processus s'execute, et un signal SIGVTALRM est emis a l'expiration du delai.

ITIMER_PROF
    decroit a la fois quand le processus s'execute, et quand le processeur execute des fonctions systemes a la demande du processus. Ce timer, utilise conjointement avec ITIMER_VIRTUAL, est generalement utilise pour obtenir le profil d'execution du processus entre les fonctionnalites utilisateur et le noyau. SIGPROF est emis a l'expiration du delai.

Les valeurs des temporisations sont definies avec les structures suivantes :
    struct itimerval {
      struct timeval it_interval; /* valeur suivante */
      struct timeval it_value;    /* valeur actuelle */
    };
    struct timeval {
      long tv_sec;                /* secondes        */
      long tv_usec;               /* micro secondes  */
    };

Getitimer(2) renseigne la structure pointee par value avec le parametrage de la temporisation which (parmi ITIMER_REAL, ITIMER_VIRTUAL, ou ITIMER_PROF). L'element it_value est rempli avec le delai restant dans la temporisation, ou zero si la temporisation est desactivee. De meme it_interval sera rempli avec la valeur originale de la temporisation. Setitimer(2) positionne la temporisation avec les valeurs de value. Si ovalue est non nulle, les parametres precedents de la temporisation y sont inscrits.

Les temporisations decroissent de it_value a zero, declenchent un signal, et sont replacees a it_interval. Une temporisation s'arrete si elle est mise a zero (it_value vaut zero) ou bien elle expire et it_interval vaut zero.

Les deux champs tv_sec et tv_usec sont utilises pour determiner la duree d'une temporisation.

Les temporisations n'expirent jamais avant la fin du temps requis, et expirent plutot avec un delai court et constant apres la limite. Ce delai depend de la resolution du timer systeme (actuellement 10 ms). A l'expiration un signal est declenche puis la temporisation reinitialisee. Si la temporisation expire alors que le processus est actif (toujours vrai avec ITIMER_VIRT) le signal sera delivre immediatement. Autrement il y aura un petit delai avant reception du signal, dependant de la charge du systeme.

VALEUR RENVOYEE
getitimer et setitimer renvoient 0 s'ils reussissent, ou -1 s'ils echouent, auquel cas errno contient le code d'erreur.

ERREURS

EFAULT
    value ou ovalue pointent en dehors de l'espace d'adressage accessible.

EINVAL
    which n'est pas dans la liste ITIMER_REAL, ITIMER_VIRT, ou ITIMER_PROF.

CONFORMITE
SVr4, 4.4BSD (Cet appel est apparue dans 4.2BSD).

VOIR AUSSI
gettimeofday(2), sigaction(2), signal(2).

BUGS
Sous Linux, l'emission et la reception d'un signal sont distincts, et un meme signal ne peut pas etre emis deux fois de suite si le premier n'a pas ete recu. Il est aussi possible qu'avec une charge systeme tres elevee, une temporisation ITIMER_REAL expire avant que le signal d'une expiration precedente n'ait ete recu. Le second signal sera alors perdu.