Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]
GETITIMER
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- ERREURS
- NOTES
- CONFORMITÉ
- VOIR AUSSI
- BOGUES
- TRADUCTION
NOM
getitimer, setitimer - Lire/écrire 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 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 {
long tv_sec; /* secondes */
long tv_usec; /* micro secondes */
};
La fonction getitimer() renseigne la structure pointée par value avec
le paramétrage de la temporisation 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 value. Si ovalue est non nul, 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 (voir 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
L'appel renvoie 0 quand il réussit, ou -1 s'il échoue, 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_VIRTUAL, ou
ITIMER_PROF.
NOTES
Un fils créé avec fork(2) n'hérite pas des temporisations d'intervalle de
son père. Les temporisations d'intervalle sont préservées à travers un
execve(2).
CONFORMITÉ
POSIX.1-2001, SVr4, BSD 4.4 (cet appel est apparu dans BSD 4.2).
VOIR AUSSI
gettimeofday(2), sigaction(2), signal(2), time(7)
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 Linux, 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 x86 (où, depuis le noyau 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.
Sur certains systèmes (y compris x86), 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, Linux ne renvoie
pas d'erreur, et se contente d'ajuster la valeur de tv_sec
correspondante. Un jour (prévu en mars 2007), cette non conformité sera
corrigée ; les applications doivent donc être modifiées maintenant, pour
s'assurer qu'elles fournissent une valeur correcte de tv_usec.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».
|