getitimer(2) System Calls Manual getitimer(2) NOM getitimer, setitimer - Lire/ecrire la valeur d'une temporisation BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int getitimer(int which, struct itimerval *curr_value); int setitimer(int which, const struct itimerval *restrict new_value, struct itimerval *_Nullable restrict old_value); DESCRIPTION Ces appels systeme donnent acces a des temporisations d'intervalle, c'est-a-dire des temporisations qui expirent en premier a un moment du futur et (eventuellement) a des intervalles reguliers apres lui. Lorsqu'une temporisation expire, un signal est envoye au processus appelant et la temporisation est reinitialisee a l'intervalle specifie (s'il n'est pas nul). Trois types de minuteries -- indiquees par le parametre which -- sont fournis, chacun comptant par rapport a une horloge differente et generant un signal different a l'expiration de la minuterie : ITIMER_REAL Cette minuterie compte en temps reel (a savoir celui de la pendule murale). A chaque expiration, un signal SIGALRM est genere. ITIMER_VIRTUAL Cette minuterie compte par rapport au temps du processeur en mode utilisateur consomme par le processus (la mesure comprend le temps processeur consomme par tous les threads du processus). A chaque expiration, un signal SIGVTALRM est genere. ITIMER_PROF Cette minuterie compte par rapport au temps total de processeur (a savoir celui de l'utilisateur et du systeme) consomme par le processus (la mesure comprend le temps processeur consomme par tous les threads du processus). A chaque expiration, un signal SIGPROF est genere. Conjuguee a ITIMER_VIRTUAL, cette minuterie peut etre utilisee pour tracer le temps processeur du systeme et de l'utilisateur consomme par le processus. Un processus n'a qu'un des trois types de minuterie. Les valeurs des temporisations sont definies avec les structures suivantes : struct itimerval { struct timeval it_interval; /* Intervalle pour les minuteries periodiques */ struct timeval it_value; /* Delai jusqu'a la prochaine expiration */ }; struct timeval { time_t tv_sec; /* secondes */ suseconds_t tv_usec; /* microsecondes */ }; getitimer() La fonction getitimer() met la valeur actuelle de la temporisation indiquee dans which dans le tampon vers lequel pointe curr_value. La sous-structure it_value est peuplee par la quantite de temps restant avant la prochaine expiration de la minuterie indiquee. Cette valeur change pendant le decompte de la minuterie et sera reinitialisee a it_interval quand la minuterie expirera. Si les deux champs de it_value sont nuls, cette minuterie est alors desarmee (inactive). La sous-structure it_interval est peuplee par l'intervalle de la temporisation. Si les deux champs de it_interval sont nuls, il s'agit d'une minuterie a un temps (c'est-a-dire qu'elle n'expire qu'une fois). setitimer() La fonction setitimer() arme ou desarme la temporisation indiquee dans which, en positionnant la valeur de la temporisation sur la valeur indiquee par new_value. Si old_value n'est pas NULL, le tampon vers lequel il pointe est utilise pour renvoyer la valeur precedente de la temporisation (c'est-a-dire la meme information renvoyee par getitimer()). Si un champ new_value.it_value est positif, la minuterie est armee pour expirer en premier au moment specifie. Si les deux champs de new_value.it_value valent zero, la minuterie est desarmee. Le champ new_value.it_interval indique le nouvel intervalle de la minuterie ; si ses deux sous-champs sont nuls, la minuterie est configuree pour n'expirer qu'une seule fois. VALEUR RENVOYEE En cas de succes, zero est renvoye. En cas d'erreur, -1 est renvoye et errno est definie pour preciser l'erreur. 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 pointee par new_value contient une valeur hors de l'intervalle [0, 999999]. VERSIONS Les normes ne donnent pas la signification de l'appel : setitimer(which, NULL, &old_value); De nombreux systemes d'exploitation (Solaris, les BSD et peut-etre d'autres) le traitent comme etant equivalent a : getitimer(which, &old_value); Dans Linux, il est traite comme etant equivalent a un appel dans lequel les champs de new_value sont egaux a zero, ce qui correspondrait a une temporisation desactivee. N'utilisez pas cette non-fonctionnalite de Linux : elle est non portable et inutile. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, SVr4, 4.4BSD (cet appel est apparu dans 4.2BSD). POSIX.1-2008 marque getitimer() et setitimer() comme etant obsoletes, en recommandant d'utiliser a la place l'API des temporisations POSIX (timer_gettime(2), timer_settime(2), etc.). NOTES Les temporisations n'expirent jamais avant la fin du temps demande, mais elles peuvent expirer apres un court moment apres la fin, qui depend de la resolution de l'horloge systeme et de la charge du systeme ; consultez time(7) (mais consultez la section BOGUES ci-dessous). Si la temporisation expire alors que le processus est actif (toujours vrai avec ITIMER_VIRTUAL), le signal sera delivre immediatement apres sa creation. Un enfant cree avec fork(2) n'herite pas des temporisations periodiques de son parent. Les temporisations periodiques sont conservees au travers d'un execve(2). POSIX.1 laisse indeterminees les interactions entre setitimer() et les trois interfaces alarm(2), sleep(3) et usleep(3). BOGUES Sous Linux, l'emission et la reception d'un signal sont distinctes, et une seule instance de chacun des signaux peut etre en attente pour un processus. Il est ainsi 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. Avant Linux 2.6.16, les valeurs des temporisations sont exprimees en << jiffies >>. Si une temporisation est initialisee a une valeur en jiffies depassant la constante MAX_SEC_IN_JIFFIES (definie dans include/linux/jiffies.h), la temporisation est silencieusement tronquee a cette valeur maximale. Sous Linux sur i386 (ou, depuis Linux 2.6.13, un jiffy correspond par defaut a 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 representation interne du temps differente et le plafond est supprime. Sur certains systemes (y compris i386), les noyaux Linux avant Linux 2.6.12 ont un bogue qui cause des expirations prematurees de temporisation, avec une avance pouvant aller jusqu'a un jiffy dans certaines circonstances. Ce bogue est corrige dans Linux 2.6.12. Selon POSIX.1-2001, setitimer() devrait echouer si la valeur de tv_usec fournie est hors de l'intervalle [0, 999999]. Cependant, dans les noyaux de version inferieure ou egale a Linux 2.6.21, Linux ne renvoie pas d'erreur, et se contente d'ajuster la valeur de tv_sec correspondante. Depuis Linux 2.6.22, cette non conformite a ete corrigee ; une valeur non valable de tv_usec resulte en une erreur EINVAL. VOIR AUSSI gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), time(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getitimer(2)