Provided by: manpages-fr-dev_4.13-4_all 

NOM
clock_nanosleep - Sommeil haute résolution avec horloge spécifique
SYNOPSIS
#include <time.h>
int clock_nanosleep(clockid_t clockid, int flags,
const struct timespec *request,
struct timespec *remain);
Lier avec -lrt (seulement pour les versions de glibc antérieures à 2.17).
Exigences de macros de test de fonctionnalités 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 durée indiquée
avec une précision de l’ordre de la nanoseconde. Il diffère de nanosleep(2) dans le fait qu'il permet à
l'appelant de choisir l'horloge avec laquelle la durée du sommeil sera mesurée et d'indiquer une valeur
absolue ou relative pour la durée du sommeil.
Les valeurs de temps passées et retournées par cet appel sont spécifiées dans des structures timespec
définies comme suit :
struct timespec {
time_t tv_sec; /* secondes */
long tv_nsec; /* nanosecondes [0 .. 999999999] */
};
L'argument clockid précise l'horloge avec laquelle sera mesurée la durée du sommeil. Cet argument doit
être l'une des valeurs suivantes :
CLOCK_REALTIME
Une horloge temps réel configurable à l'échelle du système.
CLOCK_TAI (depuis Linux 3.10)
Horloge dérivée d'une pendule mais qui ignore le franchissement de seconde.
CLOCK_MONOTONIC
Une horloge monotonique, non configurable, mesurant le temps depuis un instant du passé non
spécifié qui ne change pas après le démarrage du système.
CLOCK_BOOTIME (depuis Linux 2.6.39)
Identique à CLOCK_MONOTONIC, mais elle englobe toute la durée durant laquelle le système est en
veille.
CLOCK_PROCESS_CPUTIME_ID
Une horloge configurable par processus mesurant le temps processeur consommé par tous les threads
du processus.
Voir clock_getres(2) pour plus de détails sur ces horloges. En outre, les identifiants de l'horloge du
processeur renvoyés par clock_getcpuclockid(3) et pthread_getcpuclockid(3) peuvent aussi être passés en
tant que clockid.
Si flags vaut 0, la valeur indiquée dans request est interprétée comme une durée relative à la valeur
actuelle de l'horloge indiquée dans clockid.
Si flags vaut TIMER_ABSTIME, request est interprété comme un temps absolu tel qu'il est mesuré par
l'horloge clockid. Si request est inférieur ou égal à la valeur actuelle de l'horloge, clock_nanosleep()
renvoie immédiatement sans suspendre le thread appelant.
clock_nanosleep() suspend l'exécution du thread appelant jusqu'à ce que soit le temps indiqué dans
request se soit écoulé, soit un signal a été délivré provoquant l'appel d'un gestionnaire de signal ou la
fin du processus.
Si l'appel a été interrompu par un gestionnaire de signal, clock_nanosleep() échoue 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 consommé. Cette valeur peut être ensuite utilisée pour rappeler clock_nanosleep()
et achever un sommeil (relatif).
VALEUR RENVOYÉE
Après un sommeil complet de la durée souhaitée, clock_nanosleep() renvoie 0. Si l'appel système est
interrompu par un gestionnaire de signal ou rencontre une erreur, il renvoie un des codes d'erreur
positifs listés dans ERREURS.
ERREURS
EFAULT request ou remain n'indique pas une adresse valable.
EINTR Le sommeil a été interrompu par un gestionnaire de signal ; voir signal(7).
EINVAL La valeur du champ tv_nsec n'est pas dans l'intervalle 0 à 999 999 999 ou tv_sec est négatif.
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.
VERSIONS
L'appel système clock_nanosleep() a été introduit dans le noyau Linux dans sa version 2.6. La prise en
charge dans la glibc est disponible depuis la version 2.1.
CONFORMITÉ
POSIX.1-2001, POSIX.1-2008.
NOTES
Si la durée indiquée dans request n'est pas un multiple exact de la granularité de l'horloge sous-jacente
(consultez time(7)), la durée sera alors arrondie au multiple supérieur. De plus, lorsque le sommeil sera
achevé, il y a toujours un délai avant lequel le processeur redevienne libre pour exécuter le thread
appelant.
L'utilisation d'une temporisation absolue est utile pour prévenir les problèmes de dérive de temps du
type de ceux décrits dans nanosleep(2). (De tels problèmes sont exacerbés dans les programmes qui
essaient de relancer un sommeil relatif interrompu de manière répétitive par des signaux.) Pour réaliser
un sommeil qui s'affranchisse de ces problèmes, appelez clock_gettime(2) pour l'horloge souhaitée,
ajoutez la durée voulue à la valeur de temps renvoyée, appelez ensuite clock_nanosleep() avec l'attribut
TIMER_ABSTIME.
clock_nanosleep() n'est jamais relancé après avoir été interrompu par un gestionnaire de signal, que l'on
ait ou non utilisé l'attribut SA_RESTART de sigaction(2).
L'argument remain n'est pas utilisé et n'est pas nécessaire lorsque flags vaut TIMER_ABSTIME. (Un sommeil
absolu peut être relancé en utilisant le même argument request.)
POSIX.1 précise que clock_nanosleep() n'a aucun effet sur les dispositions de signaux ou sur le masque de
signaux.
POSIX.1 précise qu'après avoir modifié la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2), la
nouvelle valeur de l'horloge doit être utilisée pour déterminer l'heure à laquelle un thread bloqué avec
un appel clock_nanosleep() absolu se réveillera ; si la valeur de la nouvelle horloge dépasse la durée du
sommeil, l'appel système, clock_nanosleep() renvoie immédiatement.
POSIX.1 précise que modifier la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2) n'a pas d'effet
sur un thread bloqué par un appel clock_nanosleep() relatif.
VOIR AUSSI
clock_getres(2), nanosleep(2), restart_syscall(2), timer_create(2), sleep(3), usleep(3), time(7)
COLOPHON
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse https://www.kernel.org/doc/man-pages/.
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> 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.
Linux 11 avril 2020 CLOCK_NANOSLEEP(2)