Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       epoll_wait, epoll_pwait - Attendre un événement sur un descripteur epoll

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 *sigmask);

DESCRIPTION

       L'appel  système  epoll_wait() attend un événement sur l'instance epoll(7) indiquée par le
       descripteur epfd. La zone mémoire pointée par events contiendra les événements disponibles
       pour  l'appelant.  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.
       L’appel bloquera jusqu’au premier événement suivant :

       *  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 structure epoll_event est définie ainsi :

           typedef union epoll_data {
               void    *ptr;
               int      fd;
               uint32_t u32;
               uint64_t u64;
           } epoll_data_t;

           struct epoll_event {
               uint32_t     events;    /* Événements epoll */
               epoll_data_t data;      /* Variable utilisateur */
           };

       Le  champ  data  de la structure renvoyée contiendra les mêmes données que lors de l'appel
       epoll_ctl(2) (EPOLL_CTL_ADD, EPOLL_CTL_MOD) tandis  que  le  champ  events  contiendra  le
       masque de bit des événements disponibles.

   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;

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

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

VALEUR RENVOYÉE

       Lorsqu'il réussit, l'appel epoll_wait() renvoie le nombre de descripteurs prêts  pour  les
       E/S  demandées,  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 contient le code
       approprié.

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 lieu, soit que la temporisation timeout n'expire ; 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.

VERSIONS

       epoll_wait a été introduite dans le noyau Linux 2.6. La prise en charge par la glibc a été
       ajoutée dans la version 2.3.2.

       epoll_pwait a été introduite dans le noyau Linux 2.6.19. La prise en charge par la glibc a
       été ajoutée dans la version 2.6.

CONFORMITÉ

       epoll_wait() est spécifique à Linux.

NOTES

       Alors  qu'un  thread  est  bloqué  par un appel de epoll_pwait(), un autre thread pourrait
       ajouter 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().

       Consultez  select(2)  pour une discussion sur ce qui pourrait arriver si un descripteur de
       fichier, dans une instance epoll, surveillé par  epoll_wait()  est  fermé  dans  un  autre
       thread.

BOGUES

       Dans  les  noyaux  jusqu'à  la  version 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) est 4 et la valeur HZ du noyau est 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)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe   Blaess   <http://www.blaess.fr/christophe/>   (1996-2003),    Alain    Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».