Provided by: manpages-fr-dev_4.15.0-9_all bug

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.13 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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.