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.
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> ».