nanosleep   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (2)
Updated: 26 juillet 2007
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
nanosleep - Arrêter l'exécution pendant une durée donnée  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#define _POSIX_C_SOURCE 199309 #include <time.h>

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

Exigences de macros de test de fonctionalités pour la glibc (voir feature_test_macros(7)) :

nanosleep() : _POSIX_C_SOURCE >= 199309L  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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, remplit errno avec la valeur EINTR, et inscrit le temps restant dans la structure pointée par rem à 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.  




VALEUR RENVOYÉE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
S'il s'endort de manière réussie pendant l'intervalle de temps demandé En cas d'erreur ou d'interruption, l'appel système nanosleep() renvoie 0. Si l'appel est interrompu par un gestionnaire de signaux ou rencontre une erreur, il renvoie -1 et écrit errno en conséquence.  



ERREURS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
EFAULT
Problème lors de la copie d'information à partir de l'espace utilisateur.
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.
 



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
POSIX.1-2001.  



BOGUES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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 (voir time(7))). 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.  



Ancien comportement   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Afin de pouvoir supporter des 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() pouvait aussi offrir des pauses jusqu'à 2 ms, effectuées avec des boucles actives d'une précision de l'ordre de la micro-seconde, lorsque le processus était mis sous le contrôle d'un ordonnanceur temps réel comme SCHED_FIFO ou SCHED_RR. Cette extension particulière a été retiré dans le noyau 2.5.39. Elle est donc toujours présence dans les noyaux 2.4, mais plus dans les noyaux 2.6.

Dans Linux 2.4, si nanosleep() est arrêté par un signal (par exemple, SIGTSTP), l'appel échoue avec l'erreur EINTR après que le processus ait repris avec un signal SIGCONT. Si l'appel système est, par la suite, relancé, le temps passé par le processus dans l'état arrêté n'est pas comptabilisé dans l'intervalle de sommeil.  




VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
sched_setscheduler(2), sleep(3), timer_create(3), usleep(3), time(7)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 14 octobre 1996 et révisée le 8 janvier 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 nanosleep ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
BOGUES
Ancien comportement
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EFAULTERREURS
EINTRERREURS
EINVALERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:50:54, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional