Provided by: manpages-fr-dev_4.26.0-1_all bug

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.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                      epoll_wait(2)