Man page - getitimer(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

getitimer

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
getitimer()
setitimer()
VALEUR RENVOYÉE
ERREURS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

getitimer, setitimer - Lire/Ă©crire la valeur d’une temporisation

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/time.h>

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 systĂšme donnent accĂšs Ă  des temporisations d’intervalle, c’est-Ă -dire des temporisations qui expirent en premier Ă  un moment du futur et (Ă©ventuellement) Ă  des intervalles rĂ©guliers aprĂšs lui. Lorsqu’une temporisation expire, un signal est envoyĂ© au processus appelant et la temporisation est rĂ©initialisĂ©e Ă  l’intervalle spĂ©cifiĂ© (s’il n’est pas nul).

Trois types de minuteries — indiquĂ©es par le paramĂštre which — sont fournis, chacun comptant par rapport Ă  une horloge diffĂ©rente et gĂ©nĂ©rant un signal diffĂ©rent Ă  l’expiration de la minuterie :
ITIMER_REAL

Cette minuterie compte en temps rĂ©el (Ă  savoir celui de la pendule murale). À chaque expiration, un signal SIGALRM est gĂ©nĂ©rĂ©.

ITIMER_VIRTUAL

Cette minuterie compte par rapport au temps du processeur en mode utilisateur consommĂ© par le processus (la mesure comprend le temps processeur consommĂ© par tous les threads du processus). À chaque expiration, un signal SIGVTALRM est gĂ©nĂ©rĂ©.

ITIMER_PROF

Cette minuterie compte par rapport au temps total de processeur (Ă  savoir celui de l’utilisateur et du systĂšme) consommĂ© par le processus (la mesure comprend le temps processeur consommĂ© par tous les threads du processus). À chaque expiration, un signal SIGPROF est gĂ©nĂ©rĂ©.

ConjuguĂ©e Ă  ITIMER_VIRTUAL , cette minuterie peut ĂȘtre utilisĂ©e pour tracer le temps processeur du systĂšme et de l’utilisateur consommĂ© par le processus.

Un processus n’a qu’un des trois types de minuterie.

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

struct itimerval {
struct timeval it_interval; /* Intervalle pour les
minuteries périodiques */
struct timeval it_value; /* DĂ©lai jusqu’à 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 indiquée dans which dans le tampon vers lequel pointe curr_value .

La sous-structure it_value est peuplée par la quantité de temps restant avant la prochaine expiration de la minuterie indiquée. Cette valeur change pendant le décompte de la minuterie et sera réinitialisée à it_interval quand la minuterie expirera. Si les deux champs de it_value sont nuls, cette minuterie est alors désarmée (inactive).

La sous-structure it_interval est peuplĂ©e par l’intervalle de la temporisation. Si les deux champs de it_interval sont nuls, il s’agit d’une minuterie Ă  un temps (c’est-Ă -dire qu’elle n’expire qu’une fois).

setitimer()

La fonction setitimer () arme ou dĂ©sarme la temporisation indiquĂ©e dans which , en positionnant la valeur de la temporisation sur la valeur indiquĂ©e par new_value . Si old_value n’est pas NULL, le tampon vers lequel il pointe est utilisĂ© pour renvoyer la valeur prĂ©cĂ©dente de la temporisation (c’est-Ă -dire la mĂȘme information renvoyĂ©e par getitimer ()).

Si un champ new_value.it_value est positif, la minuterie est armée pour expirer en premier au moment spécifié. Si les deux champs de new_value.it_value valent zéro, la minuterie est désarmée.

Le champ new_value.it_interval indique le nouvel intervalle de la minuterie ; si ses deux sous-champs sont nuls, la minuterie est configurĂ©e pour n’expirer qu’une seule fois.

VALEUR RENVOYÉE

En cas de succĂšs, zĂ©ro est renvoyĂ©. En cas d’erreur, -1 est renvoyĂ© et errno est dĂ©finie pour prĂ©ciser 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 pointĂ©e 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 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.

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 Ă©tant obsolĂštes, en recommandant d’utiliser Ă  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 demandĂ©, mais elles peuvent expirer aprĂšs un court moment aprĂšs la fin, qui dĂ©pend de la rĂ©solution de l’horloge systĂšme et de la charge du systĂšme ; 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 dĂ©livrĂ© immĂ©diatement aprĂšs sa crĂ©ation.

Un enfant créé avec fork (2) n’hĂ©rite pas des temporisations pĂ©riodiques de son parent. Les temporisations pĂ©riodiques sont conservĂ©es au travers d’un execve (2).

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

BOGUES

Sous Linux, l’émission et la rĂ©ception d’un signal sont distinctes, et une seule instance de chacun des signaux peut ĂȘtre en attente pour un processus. 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.

Avant Linux 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 Linux 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 est hors de l’intervalle [0, 999999]. Cependant, dans les noyaux de version infĂ©rieure ou Ă©gale Ă  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 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)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .