Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       clock_nanosleep - Sommeil haute résolution avec horloge spécifique

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc), depuis la glibc 2.17

       Avant la glibc 2.17, bibliothèque de temps réel (librt, -lrt)

SYNOPSIS

       #include <time.h>

       int clock_nanosleep(clockid_t clockid, int flags,
                           const struct timespec *request,
                           struct timespec *_Nullable remain);

   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 renvoyées par cet appel sont spécifiées dans des structures timespec(3).

       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_BOOTTIME (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 Linux 2.6. Sa prise en charge est disponible
       depuis la glibc 2.1.

STANDARDS

       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), timespec(3), usleep(3),
       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> 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.

Pages du manuel de Linux 6.03                    12 février 2023                              clock_nanosleep(2)