Loading

NOM

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

SYNOPSIS

       #include <time.h>

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

       Effectuez l’édition des liens avec l’option -lrt.

   Exigences  de  macros  de  test  de  fonctionnalités  pour  la  glibc (voir
   feature_test_macros(7)) :

       clock_nanosleep() : _XOPEN_SOURCE >= 600

       Comme nanosleep(2), clock_nanosleep() permet à l’appelant de sommeiller
       pendant  une  durée  indiquée  avec une précision 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  à  ou  retournées  par  cet  appel  sont
       spécifiés dans des structures timespec définies comme suit :

           struct timespec {
               time_t tv_sec;        /* secondes */
               long   tv_nsec;       /* nanosecondes [0 .. 999999999] */
           };

       L’argument  clock_id  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_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_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 d’informations sur ces horloges.

       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
       clock_id.

       Si  flags  vaut  TIMER_ABSTIME,  request  est interprété comme un temps
       absolu tel qu’il est mesuré par  l’horloge  clock_id.  Si  request  est
       inférieur  ou égal à la valeur actuelle de l’horloge, clock_nanosleep()
       revient 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() renvoie -1 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 code d’erreur positif.

ERREURS

       EFAULT request ou remain n’indique pas une adresse valide.

       EINTR  Le sommeil a été interrompu par un gestionnaire de signal.

       EINVAL La valeur du champ tv_nsec  n’est  pas  dans  l’intervalle  0  à
              999 999 999 ou tv_sec est négatif.

       EINVAL clock_id  n’est  pas  valide. (CLOCK_THREAD_CPUTIME_ID n’est pas
              une valeur permise pour clock_id.)

VERSIONS

       L’appel système clock_nanosleep() a été indroduit 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.

NOTES

       Si la durée indiquée dans request n’est pas un  multiple  exact  de  la
       granularité  de  l’horloge  sous-jacente  (voir 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_SIGACTION 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 nouvelle
       horloge fait que la durée du  sommeil  est  dépassée,  l’appel  système
       clock_nanosleep() revient 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() absolu.

VOIR AUSSI

       nanosleep(2),  timer_create(2),  clock_getres(2),  sleep(3), usleep(3),
       time(7)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été  traduite  par Alain Portal <aportal AT
       univ-montp2  DOT   fr>   en   2008,   et   mise   à   disposition   sur
       http://manpagesfr.free.fr/.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».