Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       nanosleep - Sommeil en haute resolution

SYNOPSIS

       #include <time.h>

       int nanosleep(const struct timespec *req, struct timespec *rem);

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       nanosleep() : _POSIX_C_SOURCE >= 199309L

DESCRIPTION

       nanosleep() suspend l'execution du thread appelant jusqu'a  ce  que  le
       temps indique dans *req ait expire, ou que la reception d'un signal ait
       declenche l'invocation d'un gestionnaire dans le thread appelant ou ait
       termine le processus.

       Si  l'appel  est  interrompu  par un gestionnaire de signal nanosleep()
       renvoie -1, renseigne errno avec la valeur EINTR, et inscrit  le  temps
       restant dans la structure pointee par rem a moins que rem soit NULL. La
       valeur de *rem peut etre utilisee pour rappeler a  nouveau  nanosleep()
       afin de terminer la pause (mais voir la section NOTES plus loin).

       La  structure timespec est utilisee pour indiquer l'intervalle de temps
       en nanosecondes. Elle est definie comme ceci :

           struct timespec {
               time_t tv_sec;        /* secondes     */
               long   tv_nsec;       /* nanosecondes */
           };

       La valeur du  champ  nanosecondes  doit  etre  dans  l'intervalle  0  a
       999 999 999.

       Par  rapport  a  sleep(3)  et  usleep(3),  nanosleep()  a les avantages
       suivants : il fournit une meilleure resolution pour indiquer  la  duree
       du sommeil ; POSIX.1 indique explicitement qu'il n'interagit avec aucun
       signal ; il permet enfin de continuer facilement un sommeil  interrompu
       par un signal.

VALEUR RENVOY'EE

       L'appel nanosleep() renvoie 0 s'il reussit a suspendre l'execution pour
       la duree demandee. Si l'appel est interrompu  par  un  gestionnaire  de
       signal ou rencontre une erreur, il renvoie -1 et errno contient le code
       d'erreur.

ERREURS

       EFAULT Probleme lors de la copie d'information  a  partir  de  l'espace
              utilisateur.

       EINTR  La  pause  a ete interrompue par un signal non bloque delivre au
              thread. Le temps restant de sommeil a ete inscrit dans *rem pour
              que   le  thread  puisse  terminer  facilement  son  sommeil  en
              rappelant nanosleep().

       EINVAL La valeur du champ tv_nsec  n'est  pas  dans  l'intervalle  0  a
              999 999 999 ou tv_sec est negatif.

CONFORMIT'E

       POSIX.1-2001.

NOTES

       Si  l'intervalle  indique  dans  req  n'est pas un multiple exact de la
       granularite de l'horloge sous-jacente (consultez time(7)), l'intervalle
       est  arrondi  au  multiple superieur. De plus, apres que le sommeil est
       acheve, il y a toujours un delai avant que le processeur ne  redevienne
       completement disponible pour le thread appelant.

       Le  fait  que  nanosleep()  endorme  pour  une duree relative peut etre
       problematique si l'appel est relance de maniere repetee apres avoir ete
       interrompu par des signaux, puisque le temps entre les interruptions et
       les redemarrages de l'appel connaitra une  derive  lorsque  le  sommeil
       sera  finalement  acheve.  Ce  probleme  peut  etre  evite en utilisant
       clock_nanosleep(2) avec une valeur de temps absolu.

       POSIX.1 indique que nanosleep() doit mesurer le  temps  avec  l'horloge
       CLOCK_REALTIME.   Pourtant,   Linux  mesure  le  temps  avec  l'horloge
       CLOCK_MONOTONIC.  Cela  n'a  probablement  pas  d'importance   car   la
       specification  POSIX.1 de clock_settime() indique que les modifications
       discontinues dans CLOCK_REALTIME n'affectent pas nanosleep() :

              Configurer  la   valeur   de   l'horloge   CLOCK_REALTIME   avec
              clock_settime()  ne  doit  pas  avoir  d'effet  sur  les threads
              bloques attendant un service de temps  relatif  base  sur  cette
              horloge.   Cela   inclut   la   fonction   nanosleep() ;   ...En
              consequence, ces services de temps doivent  expirer  lorsque  la
              duree   relative   demandee   est  atteinte,  independamment  de
              l'ancienne ou la nouvelle valeur de l'horloge.

   Ancien comportement
       Certaines  applications  necessitant  des  pauses  plus  precises  (par
       exemple  pour  le  controle  de  peripheriques  materiels avec un delai
       critique), nanosleep() peut aussi offrir des pauses avec une  precision
       plus  elevee.  Si  le  thread  est mis sous le controle d'une politique
       d'ordonnancement temps reel comme SCHED_FIFO ou  SCHED_RR,  les  pauses
       jusqu'a 2 ms seront effectuees avec des boucles actives d'une precision
       de l'ordre de la microseconde. Cette extension speciale a ete supprimee
       dans  le  noyau  2.5.39,  et est donc toujours presente dans les noyaux
       2.4, mais pas dans les noyaux 2.6.

BOGUES

       Dans Linux 2.4, si nanosleep() est arrete par un signal  (par  exemple,
       SIGTSTP),  l'appel  echoue  avec  l'erreur  EINTR apres que le thread a
       repris avec un signal SIGCONT. Si l'appel systeme est,  par  la  suite,
       relance,  le  temps  passe  par  le thread dans l'etat arrete n'est pas
       comptabilise dans l'intervalle de sommeil.

VOIR AUSSI

       clock_nanosleep(2), sched_setscheduler(2),  sleep(3),  timer_create(2),
       usleep(3), time(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).    Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.