Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
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(2) indique que les modifications
discontinues dans CLOCK_REALTIME n'affectent pas nanosleep() :
Configurer la valeur de l'horloge CLOCK_REALTIME avec
clock_settime(2) 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), timer_create(2), sleep(3),
usleep(3), time(7)
COLOPHON
Cette page fait partie de la publication 3.32 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> >>.