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