epoll_wait

EPOLL_WAIT(2)             Manuel du programmeur Linux            EPOLL_WAIT(2)



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 dâ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.70 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 Ã
       <perkamon-fr@traduc.org>.

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



Linux                           31 janvier 2014                  EPOLL_WAIT(2)