NANOSLEEP(2) Manuel du programmeur Linux NANOSLEEP(2)
NOM
nanosleep - Arrêter l'exécution pendant une durée donnée.
SYNOPSIS
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec
*rem);
DESCRIPTION
nanosleep suspend l'exécution du programme en cours pour
une durée valant au moins *req. Cette fonction peut se
terminer plus tôt que prévu si un signal a été reçu par le
processus. Dans ce cas, elle renvoie -1, positionne errno
à la valeur EINTR, et inscrit le temps restant dans la
structure pointée par rem a moins que rem soit NULL. La
valeur de *rem peut être utilisée pour rappeler à nouveau
nanosleep afin de terminer la pause.
La structure timespec est utilisée pour indiquer l'inter
valle de temps en nano-secondes. Elle est définie dans
<time.h> et a la forme suivante
struct timespec
{
time_t tv_sec; /* secondes */
long tv_nsec; /* nano-secondes */
};
La valeur du champ nano-seconde doit être dans l'inter
valle 0 à 999 999 999.
Par rapport à sleep(3) et usleep(3), nanosleep a l'avan
tage de n'affecter aucun signal, d'être au standard POSIX,
de fournir une meilleure résolution, et de permettre de
continuer facilement un sommeil interrompu par un signal.
ERREURS
En cas d'erreur ou d'interruption, l'appel système
nanosleep renvoie -1 et place dans errno une des valeurs
suivantes :
EINTR La pause a été interrompue par un signal non-
bloqué délivré au processus. Le temps restant de
sommeil a été inscrit dans *rem pour que le pro
cessus puisse terminer facilement son sommeil.
EINVAL La valeur du champ tv_nsec n'est pas dans l'inter
valle 0 à 999 999 999 ou tv_sec est négatif.
BUGS
L'implémentation actuelle de nanosleep est construite sur
le mécanisme de temporisation du noyau, qui dispose d'une
résolution valant 1/HZ s (10 ms sur Linux/i386 et 1 ms sur
Linux 8 Avril 1997 1
NANOSLEEP(2) Manuel du programmeur Linux NANOSLEEP(2)
Linux/Alpha). Ainsi, nanosleep dormira toujours pour une
durée au moins egale au temps spécifié, mais il peut pren
dre jusqu'à 10 ms de plus (i386) avant de faire redémarrer
le processus. Pour la même raison, la valeur retournée
dans *rem en cas d'interruption par un signal est arrondie
au multiple supérieur de 1/HZ s.
Certaines applications nécessitant des pauses plus
précises (par exemple pour le contrôle de périphériques
matériels avec un délai critique), nanosleep peut aussi
offrir des pauses avec une précision plus élevée. Si le
processus est mis sous le contrôle d'un ordonnanceur temps
réel comme SCHED_FIFO ou SCHED_RR, les pauses jusqu'a 2 ms
seront effectuées avec des boucles d'une précision de
l'ordre de la micro-seconde.
CONFORMITÉ
POSIX.1b (anciennement POSIX.4).
VOIR AUSSI
sleep(3), usleep(3), sched_setscheduler(2), et timer_cre
ate(2).
TRADUCTION
Christophe Blaess, 1997.
Linux 8 Avril 1997 2