Avant la glibc 2.17, bibliothèque de temps réel (librt, -lrt)
int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *request, struct timespec *_Nullable remain);
Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :
clock_nanosleep() :
_POSIX_C_SOURCE >= 200112L
Les valeurs de temps passées et renvoyées par cet appel sont spécifiées dans des structures timespec(3).
L'argument clockid précise l'horloge avec laquelle sera mesurée la durée du sommeil. Cet argument doit être l'une des valeurs suivantes :
Voir clock_getres(2) pour plus de détails sur ces horloges. En outre, les identifiants de l'horloge du processeur renvoyés par clock_getcpuclockid(3) et pthread_getcpuclockid(3) peuvent aussi être passés en tant que clockid.
Si flags vaut 0, la valeur indiquée dans request est interprétée comme une durée relative à la valeur actuelle de l'horloge indiquée dans clockid.
Si flags vaut TIMER_ABSTIME, request est interprété comme un temps absolu tel qu'il est mesuré par l'horloge clockid. Si request est inférieur ou égal à la valeur actuelle de l'horloge, clock_nanosleep() renvoie immédiatement sans suspendre le thread appelant.
clock_nanosleep() suspend l'exécution du thread appelant jusqu'à ce que soit le temps indiqué dans request se soit écoulé, soit un signal a été délivré provoquant l'appel d'un gestionnaire de signal ou la fin du processus.
Si l'appel a été interrompu par un gestionnaire de signal, clock_nanosleep() échoue et renseigne errno avec EINTR. De plus, si remain n'est pas NULL et si flags n'est pas TIMER_ABSTIME, il renvoie dans remain le temps de sommeil non consommé. Cette valeur peut être ensuite utilisée pour rappeler clock_nanosleep() et achever un sommeil (relatif).
L'utilisation d'une temporisation absolue est utile pour prévenir les problèmes de dérive de temps du type de ceux décrits dans nanosleep(2). (De tels problèmes sont exacerbés dans les programmes qui essaient de relancer un sommeil relatif interrompu de manière répétitive par des signaux.) Pour réaliser un sommeil qui s'affranchisse de ces problèmes, appelez clock_gettime(2) pour l'horloge souhaitée, ajoutez la durée voulue à la valeur de temps renvoyée, appelez ensuite clock_nanosleep() avec l'attribut TIMER_ABSTIME.
clock_nanosleep() n'est jamais relancé après avoir été interrompu par un gestionnaire de signal, que l'on ait ou non utilisé l'attribut SA_RESTART de sigaction(2).
L'argument remain n'est pas utilisé et n'est pas nécessaire lorsque flags vaut TIMER_ABSTIME. (Un sommeil absolu peut être relancé en utilisant le même argument request.)
POSIX.1 précise que clock_nanosleep() n'a aucun effet sur les dispositions de signaux ou sur le masque de signaux.
POSIX.1 précise qu'après avoir modifié la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2), la nouvelle valeur de l'horloge doit être utilisée pour déterminer l'heure à laquelle un thread bloqué avec un appel clock_nanosleep() absolu se réveillera ; si la valeur de la nouvelle horloge dépasse la durée du sommeil, l'appel système, clock_nanosleep() renvoie immédiatement.
POSIX.1 précise que modifier la valeur de l'horloge CLOCK_REALTIME avec clock_settime(2) n'a pas d'effet sur un thread bloqué par un appel clock_nanosleep() relatif.
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 à