Man page - epoll_pwait(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

epoll_wait

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
epoll_pwait()
epoll_pwait2()
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
Différences entre bibliothÚque C et noyau
BOGUES
VOIR AUSSI
TRADUCTION

NOM

epoll_wait, epoll_pwait epoll_pwait2 - Attendre un Ă©vĂ©nement d’E/S sur un descripteur de fichier epoll

BIBLIOTHÈQUE

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

SYNOPSIS

#include <sys/epoll.h>

int epoll_wait(int epfd , struct epoll_event * events ,
int
maxevents , int timeout );
int epoll_pwait(int
epfd , struct epoll_event * events ,
int
maxevents , int timeout ,
const sigset_t *_Nullable
sigmask );
int epoll_pwait2(int
epfd , struct epoll_event * events ,
int
maxevents , const struct timespec *_Nullable timeout ,
const sigset_t *_Nullable
sigmask );

DESCRIPTION

L’appel systĂšme epoll_wait () attend la rĂ©ception d’un Ă©vĂ©nement sur l’instance epoll (7) Ă  laquelle se rapporte le descripteur de fichier epfd . La zone mĂ©moire pointĂ©e par events est utilisĂ©e pour renvoyer des informations issues de la liste prĂ©parĂ©e pour les descripteurs de fichier de la liste d’intĂ©rĂȘts ayant des Ă©vĂ©nements disponibles. Un maximum de maxevents Ă©vĂ©nements sont renvoyĂ©s par epoll_wait (). Le paramĂštre maxevents doit ĂȘtre supĂ©rieur Ă  zĂ©ro.

L’argument timeout dĂ©finit le temps en milliseconde pendant lequel epoll_wait () bloquera. Le temps est mesurĂ© avec l’horloge CLOCK_MONOTONIC .

Un appel à epoll_wait () bloquera jusqu’à :

-

un descripteur de fichier délivre un événement ;

-

l’appel est interrompu par un gestionnaire de signal ;

-

le délai expire.

Remarquez que l’intervalle timeout sera arrondi Ă  la granularitĂ© de l’horloge systĂšme et que les dĂ©lais d’ordonnancement du noyau signifient que l’intervalle de blocage pourrait ĂȘtre dĂ©passĂ© d’une petite quantitĂ©. Un timeout de -1 force epoll_wait () Ă  attendre indĂ©finiment, alors qu’un timeout nul force epoll_wait () Ă  se terminer immĂ©diatement, mĂȘme si aucun Ă©vĂ©nement n’est disponible.

La struct epoll_event est décrite dans epoll_event (3type).

Le champ data de chaque structure epoll_event renvoyĂ©e contiendra les mĂȘmes donnĂ©es que celles de l’appel epoll_ctl (2) le plus rĂ©cent ( EPOLL_CTL_ADD , EPOLL_CTL_MOD ) pour le descripteur de fichier ouvert correspondant.

Le champ events est un masque de bits qui indique les événements qui se sont produits pour la description de fichier ouvert correspondante. Voir epoll_ctl (2) pour une liste de bits qui peuvent apparaßtre dans ce masque.

epoll_pwait()

La relation entre epoll_wait () et epoll_pwait () est similaire Ă  celle entre select (2) et pselect (2) : de mĂȘme que pselect (2), epoll_pwait () permet Ă  une application d’attendre de façon sĂ»re qu’un descripteur de fichier soit prĂȘt ou qu’un signal arrive.

L’appel à epoll_pwait () suivant :

ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);

est équivalent à exécuter de façon atomique les appels suivants :

sigset_t origmask;
pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
ready = epoll_wait(epfd, &events, maxevents, timeout);
pthread_sigmask(SIG_SETMASK, &origmask, NULL);

Le paramÚtre sigmask peut valoir NULL, auquel cas, epoll_pwait () est équivalent à epoll_wait ().

epoll_pwait2()

L’appel systĂšme epoll_pwait2 () est Ă©quivalent Ă  epoll_pwait (), sauf concernant l’argument timeout . Il prend un argument de type timespec pour pouvoir indiquer le dĂ©lai de rĂ©solution en nanosecondes. Cet argument fonctionne de la mĂȘme façon que pselect (2) et ppoll (2). Si timeout est NULL, epoll_pwait2 () peut bloquer indĂ©finiment.

VALEUR RENVOYÉE

Lorsqu’il rĂ©ussit, l’appel epoll_wait () renvoie le nombre de descripteurs prĂȘts pour l’opĂ©ration d’E/S demandĂ©e, ou zĂ©ro si aucun descripteur n’est devenu prĂȘt pendant la durĂ©e timeout millisecondes. Si une erreur se produit, epoll_wait () renvoie -1 et errno est positionnĂ© pour indiquer l’erreur.

ERREURS

EBADF

epfd n’est pas un descripteur de fichier valable.

EFAULT

La zone mĂ©moire pointĂ©e par events n’est pas accessible en Ă©criture.

EINTR

L’appel a Ă©tĂ© interrompu par un signal avant, soit qu’aucun des Ă©vĂ©nements demandĂ©s n’ait eu lieu, soit que la temporisation timeout n’ait expiré ; consultez signal (7).

EINVAL

Le descripteur epfd fourni n’est pas un descripteur epoll , ou le paramĂštre maxevents est infĂ©rieur ou Ă©gal Ă  zĂ©ro.

STANDARDS

Linux.

HISTORIQUE

epoll_wait ()

Linux 2.6, glibc 2.3.2.

epoll_pwait ()

Linux 2.6.19, glibc 2.6.

epoll_pwait2 ()

Linux 5.11.

NOTES

Alors qu’un thread est bloquĂ© par un appel d’ epoll_pwait (), il est possible qu’un autre thread ajoute un descripteur de fichier Ă  l’instance epoll attendue. Si le nouveau descripteur de fichier devient prĂȘt, il forcera le dĂ©blocage de l’appel epoll_wait ().

Si plus d’un descripteur de fichier maxevents est prĂȘt quand epoll_wait () est appelĂ©, les appels epoll_wait () suivants tourneront autour des descripteurs de fichier prĂȘts. Ce comportement aide Ă  Ă©viter les scĂ©narios de manque (starvation), oĂč un processus ne parvient pas Ă  voir que des descripteurs de fichier supplĂ©mentaires sont prĂȘts car il se concentre sur des descripteurs dĂ©jĂ  connus comme prĂȘts.

Remarquez qu’il est possible d’appeler epoll_wait () sur une instance epoll dont la liste d’intĂ©rĂȘts est actuellement vide (ou le devient car les descripteurs de fichier se ferment ou sont supprimĂ©s des intĂ©rĂȘts dans un autre thread). L’appel bloquera jusqu’à ce qu’un descripteur de fichier soit ajoutĂ© plus tard Ă  la liste d’intĂ©rĂȘts (d’un autre thread) et que ce descripteur de fichier devienne prĂȘt.

Différences entre bibliothÚque C et noyau

Les appels systĂšme epoll_pwait () et epoll_pwait2 () bruts comportent un sixiĂšme argument, size_t sigsetsize , qui indique la taille en octets de l’argument sigmask . La fonction enveloppe epoll_pwait () de la glibc indique cet argument comme une valeur fixe (Ă©gale Ă  sizeof(sigset_t) ).

BOGUES

Avant Linux 2.6.37, une valeur timeout plus grande qu’environ LONG_MAX / HZ millisecondes est traitĂ©e comme -1 (c’est-Ă -dire l’infini). Ainsi, par exemple, sur un systĂšme oĂč sizeof(long) vaut 4 et la valeur HZ du noyau vaut 1000, cela signifie que les temps d’attente supĂ©rieurs Ă  35,79 minutes sont traitĂ©s comme l’infini.

VOIR AUSSI

epoll_create (2), epoll_ctl (2), epoll (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 .