Linux

CentOS 4.8

nanosleep(2)


NANOSLEEP

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’intervalle 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’intervalle 0 à 999 999 999.

Par rapport à sleep(3) et usleep(3), nanosleep a l’avantage 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 processus puisse terminer facilement son sommeil.

EINVAL

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

BOGUES

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/Alpha). Ainsi, nanosleep dormira toujours pour une durée au moins égale au temps spécifié, mais il peut prendre 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’à 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_create(2).

TRADUCTION

Christophe Blaess, 1997.


nanosleep(2)