Man page - nanosleep(2)

Packages contains this manual

Available languages:

en fr pl ja ru ro

Manual

nanosleep

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

nanosleep - Sommeil en haute résolution

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <time.h>

int nanosleep(const struct timespec * durée ,
struct timespec *_Nullable
rem );

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

nanosleep ():
_POSIX_C_SOURCE >= 199309L

DESCRIPTION

nanosleep () suspend l’exĂ©cution du thread appelant jusqu’à ce que le temps indiquĂ© dans *durĂ©e ait expirĂ©, ou que la rĂ©ception d’un signal ait dĂ©clenchĂ© l’invocation d’un gestionnaire dans le thread appelant ou ait terminĂ© 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 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 (mais voir la section NOTES plus loin).

La structure timespec est utilisĂ©e pour indiquer l’intervalle de temps en nanosecondes.

La valeur du champ nanosecondes doit ĂȘtre dans l’intervalle [0 Ă  999 999 999].

Par rapport Ă  sleep (3) et usleep (3), nanosleep () a les avantages suivants : il fournit une meilleure rĂ©solution pour indiquer la durĂ©e 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ÉE

L’appel nanosleep () renvoie 0 s’il rĂ©ussit Ă  suspendre l’exĂ©cution pour la durĂ©e demandĂ©e. 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

Problùme lors de la copie d’information à partir de l’espace utilisateur.

EINTR

La pause a été interrompue par un signal délivré au thread (voir signal (7)). Le temps restant de sommeil a été 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 Ă  999 999 999 ou tv_sec est nĂ©gatif.

VERSIONS

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 spĂ©cification 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 bloquĂ©s attendant un service de temps relatif basĂ© sur cette horloge. Cela inclut la fonction nanosleep () ; ... En consĂ©quence, ces services de temps doivent expirer lorsque la durĂ©e demandĂ©e est atteinte, indĂ©pendamment de l’ancienne ou la nouvelle valeur de l’horloge.

STANDARDS

POSIX.1-2008.

HISTORIQUE

POSIX.1-2001.

Pour gĂ©rer 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 () prend en charge des pauses jusqu’à 2 millisecondes, en Ă©tant occupĂ© avec une prĂ©cision d’une microseconde lorsqu’il est appelĂ© Ă  partir d’un thread ordonnancĂ© par une politique en temps rĂ©el comme SCHED_FIFO ou SCHED_RR . Cette extension spĂ©ciale a Ă©tĂ© supprimĂ©e dans Linux 2.5.39, et n’est donc plus disponible dans les noyaux 2.6.0 et supĂ©rieur.

NOTES

Si la durĂ©e n’est pas un multiple exact de la granularitĂ© de l’horloge sous-jacente (consultez time (7)), l’intervalle est arrondi au multiple supĂ©rieur. De plus, aprĂšs que le sommeil est achevĂ©, il y a toujours un dĂ©lai avant que le processeur ne redevienne complĂštement disponible pour le thread appelant.

Le fait que nanosleep () endorme pour une durĂ©e relative peut ĂȘtre problĂ©matique si l’appel est relancĂ© de maniĂšre rĂ©pĂ©tĂ©e aprĂšs avoir Ă©tĂ© interrompu par des signaux, puisque le temps entre les interruptions et les redĂ©marrages de l’appel connaĂźtra une dĂ©rive lorsque le sommeil sera finalement achevĂ©. Ce problĂšme peut ĂȘtre Ă©vitĂ© en utilisant clock_nanosleep (2) avec une valeur de temps absolu.

BOGUES

Si un programme captant les signaux et utilisant nanosleep () reçoit des signaux Ă  trĂšs haute vitesse, les dĂ©lais d’ordonnancement et les erreurs d’arrondi de calcul par le noyau de l’intervalle de sommeil et de la valeur de retour remain signifient que la valeur de remain peut augmenter rĂ©guliĂšrement au cours des redĂ©marrages successifs de l’appel nanosleep (). Pour Ă©viter de tels problĂšmes, utilisez clock_nanosleep (2) avec l’attribut TIMER_ABSTIME pour un sommeil d’une durĂ©e absolue.

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 thread a repris avec un signal SIGCONT . Si l’appel systĂšme est, par la suite, relancĂ©, le temps passĂ© par le thread dans l’état arrĂȘtĂ© n’est pas comptabilisĂ© dans l’intervalle de sommeil. Ce problĂšme est corrigĂ© dans les noyaux Linux 2.6.0 et supĂ©rieurs.

VOIR AUSSI

clock_nanosleep (2), restart_syscall (2), sched_setscheduler (2), timer_create (2), sleep (3), timespec (3), usleep (3), time (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .