1. NOM▲
epoll_wait, epoll_pwait - Attendre un événement sur un descripteur epoll
2. 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);
3. 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 minimal, en milliseconde, pendant lequel epoll_wait() attendra (cet intervalle sera arrondi à la granularité de l'horloge système, et 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() à revenir 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.
3.1. 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().
4. 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é.
5. 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 qu'aucun des événements demandés n'ait lieu ou 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.
6. 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.
7. CONFORMITÉ ▲
epoll_wait() est spécifique à Linux.
8. 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.
9. 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.
10. VOIR AUSSI ▲
epoll_create(2), epoll_ctl(2), epoll(7)
11. COLOPHON ▲
Cette page fait partie de la publication 3.52 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/.
12. 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 à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».