.\" -*- coding: UTF-8 -*-
.\"  Copyright (C) 2003  Davide Libenzi
.\"  Davide Libenzi <davidel@xmailserver.org>
.\" and Copyright 2007, 2012, 2014, 2018 Michael Kerrisk <tk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
.\"  This program is free software; you can redistribute it and/or modify
.\"  it under the terms of the GNU General Public License as published by
.\"  the Free Software Foundation; either version 2 of the License, or
.\"  (at your option) any later version.
.\"
.\"  This program is distributed in the hope that it will be useful,
.\"  but WITHOUT ANY WARRANTY; without even the implied warranty of
.\"  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\"  GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" <http://www.gnu.org/licenses/>.
.\" %%%LICENSE_END
.\"
.\" 2007-04-30: mtk, Added description of epoll_pwait()
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH EPOLL_WAIT 2 "11 avril 2020" Linux "Manuel du programmeur Linux"
.SH NOM
epoll_wait, epoll_pwait \- Attendre un événement sur un descripteur epoll
.SH SYNOPSIS
.nf
\fB#include <sys/epoll.h>\fP
.PP
\fBint epoll_wait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP
\fB               int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB);\fP
\fBint epoll_pwait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP
\fB               int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB,\fP
\fB               const sigset_t *\fP\fIsigmask\fP\fB);\fP
.fi
.SH DESCRIPTION
L'appel système \fBepoll_wait\fP() attend la réception d'un événement sur
l'instance \fBepoll\fP(7) à laquelle se rapporte le descripteur de fichier
\fIepfd\fP. La zone mémoire pointée par \fIevents\fP est utilisée pour renvoyer
des informations issues de la liste préparée pour les descripteurs de
fichier de la liste d'intérêts ayant des événements disponibles. Un maximum
de \fImaxevents\fP événements sont renvoyés par \fBepoll_wait\fP(). Le paramètre
\fImaxevents\fP doit être supérieur à zéro.
.PP
L'argument \fItimeout\fP définit le temps en milliseconde pendant lequel
\fBepoll_wait\fP() bloquera. Le temps est mesuré avec l'horloge
\fBCLOCK_MONOTONIC\fP.
.PP
Un appel à \fBepoll_wait\fP() bloquera jusqu'à\ :
.IP "  \(bu" 2
un descripteur de fichier délivre un événement\ ;
.IP "  \(bu"
l’appel est interrompu par un gestionnaire de signal\ ;
.IP "  \(bu"
le délai expire.
.PP
Remarquez que l’intervalle \fItimeout\fP 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
\fItimeout\fP de \fB\-1\fP force \fBepoll_wait\fP() à attendre indéfiniment, alors
qu'un \fItimeout\fP nul force \fBepoll_wait\fP() à se terminer immédiatement, même
si aucun événement n'est disponible.
.PP
La \fIstruct epoll_event\fP est définie ainsi\ :
.PP
.in +4n
.EX
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 */
};
.EE
.in
.PP
Le champ \fIdata\fP de chaque structure \fIepoll_event\fP renvoyée contiendra les
mêmes données que celles de l'appel \fBepoll_ctl\fP(2) le plus récent
(\fBEPOLL_CTL_ADD\fP, \fBEPOLL_CTL_MOD\fP) pour le descripteur de fichier ouvert
correspondant.
.PP
.\"
Le champ \fIevents\fP est un masque de bits qui indique les événements qui se
sont produits pour la description de fichier ouvert correspondante. Voir
\fBepoll_ctl\fP(2) pour une liste de bits qui peuvent apparaître dans ce
masque.
.SS epoll_pwait()
La relation entre \fBepoll_wait\fP() et \fBepoll_pwait\fP() est similaire à celle
entre \fBselect\fP(2) et \fBpselect\fP(2)\ : de même que \fBpselect\fP(2),
\fBepoll_pwait\fP() permet à une application d'attendre de façon sûre qu'un
descripteur de fichier soit prêt ou qu'un signal arrive.
.PP
L'appel à \fBepoll_pwait\fP() suivant\ :
.PP
.in +4n
.EX
ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);
.EE
.in
.PP
est équivalent à exécuter de façon \fIatomique\fP les appels suivants\ :
.PP
.in +4n
.EX
sigset_t origmask;

pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
ready = epoll_wait(epfd, &events, maxevents, timeout);
pthread_sigmask(SIG_SETMASK, &origmask, NULL);
.EE
.in
.PP
Le paramètre \fIsigmask\fP peut valoir NULL, auquel cas, \fBepoll_pwait\fP() est
équivalent à \fBepoll_wait\fP().
.SH "VALEUR RENVOYÉE"
Lorsqu'il réussit, l'appel \fBepoll_wait\fP() 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 \fItimeout\fP millisecondes. Si une erreur se produit,
\fBepoll_wait\fP() renvoie \fB\-1\fP et \fIerrno\fP contient le code approprié.
.SH ERREURS
.TP 
\fBEBADF\fP
\fIepfd\fP n'est pas un descripteur de fichier valable.
.TP 
\fBEFAULT\fP
La zone mémoire pointée par \fIevents\fP n'est pas accessible en écriture.
.TP 
\fBEINTR\fP
L'appel a été interrompu par un signal avant, soit qu'aucun des événements
demandés n'ait eu lieu, soit que la temporisation \fItimeout\fP n'ait expiré\ ;
consultez \fBsignal\fP(7).
.TP 
\fBEINVAL\fP
Le descripteur \fIepfd\fP fourni n'est pas un descripteur \fBepoll\fP, ou le
paramètre \fImaxevents\fP est inférieur ou égal à zéro.
.SH VERSIONS
.\" To be precise: kernel 2.5.44.
.\" The interface should be finalized by Linux kernel 2.5.66.
\fBepoll_wait\fP 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.
.PP
\fBepoll_pwait\fP 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.
.SH CONFORMITÉ
\fBepoll_wait\fP() est spécifique à Linux.
.SH NOTES
Alors qu'un thread est bloqué par un appel d’\fBepoll_pwait\fP(), il est
possible qu'un autre thread ajoute un descripteur de fichier à l'instance
\fBepoll\fP attendue. Si le nouveau descripteur de fichier devient prêt, il
forcera le déblocage de l'appel \fBepoll_wait\fP().
.PP
Si plus d'un descripteur de fichier \fImaxevents\fP est prêt quand
\fBepoll_wait\fP() est appelé, les appels \fBepoll_wait\fP() suivants tourneront
autour des descripteurs de fichier prêts. Ce comportement aide à éviter les
scénarios de manque (starvation), où un processus ne parvient pas à voir que
des descripteurs de fichier supplémentaires sont prêts car il se concentre
sur des descripteurs déjà connus comme prêts.
.PP
Remarquez qu'il est possible d'appeler \fBepoll_wait\fP() sur une instance
\fBepoll\fP dont la liste d'intérêts est actuellement vide (ou le devient car
les descripteurs de fichier se ferment ou sont supprimés des intérêts dans
un autre thread). L'appel bloquera jusqu'à ce qu'un descripteur de fichier
soit ajouté plus tard à la liste d'intérêts (d'un autre thread) et que ce
descripteur de fichier devienne prêt.
.SH BOGUES
Dans les noyaux jusqu'à la version\ 2.6.37, une valeur \fItimeout\fP plus grande
qu'environ \fILONG_MAX\ /\ HZ\fP millisecondes est traitée comme \fB\-1\fP
(c'est\-à\-dire l'infini). Ainsi, par exemple, sur un système où
\fIsizeof(long)\fP vaut \fB4\fP et la valeur \fIHZ\fP du noyau vaut 1000, cela
signifie que les temps d'attente supérieurs à 35,79\ minutes sont traités
comme l'infini.
.SS "différences entre bibliothèque C et noyau"
L'appel système \fBepoll_pwait\fP() brut comporte le sixième argument, \fIsize_t
sigsetsize\fP, qui indique la taille en octets de l'argument \fIsigmask\fP. La
fonction enveloppe \fBepoll_pwait\fP() de la glibc indique cet argument comme
une valeur fixe (égale à \fIsizeof(sigset_t)\fP).
.SH "VOIR AUSSI"
\fBepoll_create\fP(2), \fBepoll_ctl\fP(2), \fBepoll\fP(7)
.SH COLOPHON
Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP
Linux. Une description du projet et des instructions pour signaler des
anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse \%https://www.kernel.org/doc/man\-pages/.

.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
.

Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et 
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, 
veuillez envoyer un message à
.MT
debian-l10n-french@lists.debian.org
.ME .