NANOSLEEP(2)

NOM
nanosleep - Arreter l'execution pendant une duree donnee.

SYNOPSIS
#include <time.h>

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

DESCRIPTION
nanosleep suspend l'execution du programme en cours pour une duree valant au moins *req. Cette fonction peut se terminer plus tot que prevu si un signal a ete recu par le processus. Dans ce cas, elle renvoie -1, positionne errno a 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. La structure timespec est utilisee pour indiquer l'intervalle de temps en nano-secondes. Elle est definie 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 etre dans l'intervalle 0 a 999 999 999. par rapport sleep(3) et usleep(3), nanosleep a l'avantage de n'affecter aucun signal, d'etre au standard POSIX, de fournir une meilleure resolution, et de permettre de continuer facilement un sommeil interrompu par un signal.

ERREURS
En cas d'erreur ou d'interruption, l'appel systeme nanosleep renvoie -1 et place dans errno une des valeurs suivantes :

EINTR
    La pause a ete interrompue par un signal non-bloque delivre au processus. Le temps restant de sommeil a ete inscrit dans *rem pour que le processus puisse terminer facilement son sommeil.

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

BUGS
L'implementation actuelle de nanosleep est construite sur le mecanisme de temporisation du noyau, qui dispose d'une resolution valant 1/HZ s (10 ms sur Linux/i386 et 1 ms sur Linux/Alpha). Ainsi, nanosleep dormira toujours pour une duree au moins egale au temps specifie, mais il peut prendre jusqu'a 10 ms de plus (i386) avant de faire redemarrer le processus. Pour la meme raison, la valeur retournee dans *rem en cas d'interruption par un signal est arrondie au multiple superieur de 1/HZ s. 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 processus est mis sous le controle d'un ordonnanceur temps reel comme SCHED_FIFO ou SCHED_RR, les pauses jusqu'a 2 ms seront effectuees avec des boucles d'une precision de l'ordre de la micro-seconde.

CONFORMITE
POSIX.1b (anciennement POSIX.4).

VOIR AUSSI
sleep(3), usleep(3), sched_setscheduler(2), et timer_create(2).