clock_nanosleep(2) System Calls Manual clock_nanosleep(2) NOM clock_nanosleep - Sommeil haute resolution avec horloge specifique BIBLIOTHEQUE Bibliotheque C standard (libc, -lc), depuis la glibc 2.17 Avant la glibc 2.17, bibliotheque de temps reel (librt, -lrt) SYNOPSIS #include int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *request, struct timespec *_Nullable remain); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : clock_nanosleep() : _POSIX_C_SOURCE >= 200112L DESCRIPTION Comme nanosleep(2), clock_nanosleep() permet au thread appelant de sommeiller pendant une duree indiquee avec une precision de l'ordre de la nanoseconde. Il differe de nanosleep(2) dans le fait qu'il permet a l'appelant de choisir l'horloge avec laquelle la duree du sommeil sera mesuree et d'indiquer une valeur absolue ou relative pour la duree du sommeil. Les valeurs de temps passees et renvoyees par cet appel sont specifiees dans des structures timespec(3). L'argument clockid precise l'horloge avec laquelle sera mesuree la duree du sommeil. Cet argument doit etre l'une des valeurs suivantes : CLOCK_REALTIME Une horloge temps reel configurable a l'echelle du systeme. CLOCK_TAI (depuis Linux 3.10) Horloge derivee d'une pendule mais qui compte les secondes intercalaires. CLOCK_MONOTONIC Une horloge monotonique, non configurable, mesurant le temps depuis un instant du passe non specifie qui ne change pas apres le demarrage du systeme. CLOCK_BOOTTIME (depuis Linux 2.6.39) Identique a CLOCK_MONOTONIC, mais elle englobe toute la duree durant laquelle le systeme est en veille. CLOCK_PROCESS_CPUTIME_ID Une horloge configurable par processus mesurant le temps processeur consomme par tous les threads du processus. Voir clock_getres(2) pour plus de details sur ces horloges. En outre, les identifiants de l'horloge du processeur renvoyes par clock_getcpuclockid(3) et pthread_getcpuclockid(3) peuvent aussi etre passes en tant que clockid. Si flags vaut 0, la valeur indiquee dans request est interpretee comme une duree relative a la valeur actuelle de l'horloge indiquee dans clockid. Si flags vaut TIMER_ABSTIME, request est interprete comme un temps absolu tel qu'il est mesure par l'horloge clockid. Si request est inferieur ou egal a la valeur actuelle de l'horloge, clock_nanosleep() renvoie immediatement sans suspendre le thread appelant. clock_nanosleep() suspend l'execution du thread appelant jusqu'a ce que soit le temps indique dans request se soit ecoule, soit un signal a ete delivre provoquant l'appel d'un gestionnaire de signal ou la fin du processus. Si l'appel a ete interrompu par un gestionnaire de signal, clock_nanosleep() echoue et renseigne errno avec EINTR. De plus, si remain n'est pas NULL et si flags n'est pas TIMER_ABSTIME, il renvoie dans remain le temps de sommeil non consomme. Cette valeur peut etre ensuite utilisee pour rappeler clock_nanosleep() et achever un sommeil (relatif). VALEUR RENVOYEE Apres un sommeil complet de la duree souhaitee, clock_nanosleep() renvoie 0. Si l'appel systeme est interrompu par un gestionnaire de signal ou rencontre une erreur, il renvoie un des codes d'erreur positifs listes dans ERREURS. ERREURS EFAULT request ou remain n'indique pas une adresse valable. EINTR Le sommeil a ete interrompu par un gestionnaire de signal ; voir signal(7). EINVAL La valeur du champ tv_nsec n'est pas dans l'intervalle 0 a 999 999 999 ou tv_sec est negatif. EINVAL clockid n'est pas valable. (CLOCK_THREAD_CPUTIME_ID n'est pas une valeur permise pour clockid.) ENOTSUP Le noyau ne prend pas en charge le sommeil avec cette clockid. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. Linux 2.6, glibc 2.1. NOTES Si la duree indiquee dans request n'est pas un multiple exact de la granularite de l'horloge sous-jacente (consultez time(7)), la duree sera alors arrondie au multiple superieur. De plus, lorsque le sommeil sera acheve, il y a toujours un delai avant lequel le processeur redevienne libre pour executer le thread appelant. L'utilisation d'une temporisation absolue est utile pour prevenir les problemes de derive de temps du type de ceux decrits dans nanosleep(2). (De tels problemes sont exacerbes dans les programmes qui essaient de relancer un sommeil relatif interrompu de maniere repetitive par des signaux.) Pour realiser un sommeil qui s'affranchisse de ces problemes, appelez clock_gettime(2) pour l'horloge souhaitee, ajoutez la duree voulue a la valeur de temps renvoyee, appelez ensuite clock_nanosleep() avec l'attribut TIMER_ABSTIME. clock_nanosleep() n'est jamais relance apres avoir ete interrompu par un gestionnaire de signal, que l'on ait ou non utilise l'attribut SA_RESTART de sigaction(2). L'argument remain n'est pas utilise et n'est pas necessaire lorsque flags vaut TIMER_ABSTIME. (Un sommeil absolu peut etre relance en utilisant le meme argument request.) POSIX.1 precise que clock_nanosleep() n'a aucun effet sur les dispositions de signaux ou sur le masque de signaux. POSIX.1 precise qu'apres avoir modifie la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2), la nouvelle valeur de l'horloge doit etre utilisee pour determiner l'heure a laquelle un thread bloque avec un appel clock_nanosleep() absolu se reveillera ; si la valeur de la nouvelle horloge depasse la duree du sommeil, l'appel systeme, clock_nanosleep() renvoie immediatement. POSIX.1 precise que modifier la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2) n'a pas d'effet sur un thread bloque par un appel clock_nanosleep() relatif. VOIR AUSSI clock_getres(2), nanosleep(2), restart_syscall(2), timer_create(2), sleep(3), timespec(3), usleep(3), 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 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 11 novembre 2023 clock_nanosleep(2)