Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
NOM
poll, ppoll - Attendre un evenement concernant un descripteur de
fichier
SYNOPSIS
#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <poll.h>
int ppoll(struct pollfd *fds, nfds_t nfds,
const struct timespec *timeout_ts, const sigset_t *sigmask);
DESCRIPTION
poll() est une variation sur le theme de select(2) : il attend que l'un
des descripteurs de fichier soit pret pour des entrees-sorties.
L'ensemble de descripteurs de fichier a surveiller est indique dans
l'argument fds, qui est un tableau de structures de la forme suivante :
struct pollfd {
int fd; /* Descripteur de fichier */
short events; /* Evenements attendus */
short revents; /* Evenements detectes */
};
L'appelant doit specifier le nombre d'element du tableau fds dans nfds.
Le champ fd contient le descripteur d'un fichier ouvert.
Le champ events est un parametre d'entree, un masque de bits indiquant
les evenements qui interessent l'application.
Le champ revents est un parametre de sortie, rempli par le noyau avec
les evenements qui se sont effectivement produits, d'un des types
demandes par events, ou de l'une des valeurs POLLERR, POLLHUP ou
POLLNVAL. (Ces trois bits n'ont pas de signification dans la demande
events, et se trouvent positionnes dans la valeur de retour revents si
l'une des conditions correspondantes se produit.)
Si aucun evenement attendu (ni aucune erreur) ne s'est deja produit,
poll() bloque jusqu'a ce que l'un des evenements se produise.
L'argument timeout definit une limite superieure pour le temps pendant
lequel poll() attendra, en millisecondes. Une valeur negative de
timeout indique un delai infini.
Les bits qui peuvent etre actives ou renvoyes dans events et revents
sont definis par <poll.h> :
POLLIN Il y a des donnees en attente de lecture.
POLLPRI
Il y a des donnees urgentes en attente de lecture (par
exemple, des donnees hors bande sur une socket TCP, ou
bien un pseudo-terminal maitre en mode paquet constatant
un changement d'etat de l'esclave).
POLLOUT
Une ecriture ne bloquera pas.
POLLRDHUP (depuis Linux 2.6.17)
Le correspondant sur une socket en mode flux a ferme la
connexion, ou bien a termine la partie ecriture de la
connexion. La macro de test de fonctionnalite _GNU_SOURCE
doit etre definie (avant d'inclure tout fichier d'en-
tete) pour obtenir cette definition.
POLLERR
Condition d'erreur (uniquement en sortie).
POLLHUP
Le correspondant a ferme la connexion (uniquement en
sortie).
POLLNVAL
Requete invalide : fd n'est pas ouvert (uniquement en
sortie).
Lorsque _XOPEN_SOURCE est defini a la compilation, les macros suivantes
sont egalement definies (mais n'apportent pas d'informations
supplementaires par rapport aux bits listes ci-dessus :
POLLRDNORM
Equivalent a POLLIN.
POLLRDBAND
Des donnees prioritaires sont en attente de lecture
(generalement inutilise sous Linux).
POLLWRNORM
Equivalent a POLLOUT.
POLLWRBAND
Des donnees prioritaires peuvent etre ecrites.
Linux connait aussi POLLMSG, mais ne l'utilise pas.
ppoll()
La relation entre poll() et ppoll() est similaire a la relation entre
select(2) et pselect(2) : de meme que pselect(2), ppoll() permet a une
application d'attendre de facon sure que soit un descripteur de fichier
soit pret, soit un signal soit recu.
Mise a part la difference de precision de l'argument timeout, l'appel
ppoll() suivant :
ready = ppoll(&fds, nfds, timeout_ts, &sigmask);
est equivalent a executer de facon atomique les appels suivants :
sigset_t origmask;
int timeout;
timeout = (timeout_ts == NULL) ? -1 :
(timeout_ts.tv_sec * 1000 + timeout_ts.tv_nsec / 1000000);
sigprocmask(SIG_SETMASK, &sigmask, &origmask);
ready = poll(&fds, nfds, timeout);
sigprocmask(SIG_SETMASK, &origmask, NULL);
Consultez la description de pselect(2) pour une explication de la
necessite de ppoll().
Si le parametre sigmask est defini comm NULL, aucune manipulation de
masque de signaux n'est effectuee (et ainsi ppoll() ne differe de
poll() que dans la precision du parametre timeout).
L'argument timeout_ts definit une limite superieure sur le temps
pendant lequel ppoll() bloquera. Cet argument est pointe vers une
structure de la forme suivante :
struct timespec {
long tv_sec; /* secondes */
long tv_nsec; /* nanosecondes */
};
Si timeout_ts est NULL, ppoll() pourra bloquer indefiniment.
VALEUR RENVOY'EE
En cas de reussite, ces appels renvoient une valeur positive
representant le nombre de structures ayant un champ revents non nul,
c'est-a-dire le nombre de structures pour lesquels un evenement
attendu, ou une erreur, s'est produit. Une valeur de retour nulle
indique un depassement du delai d'attente. En cas d'echec, ils
renvoient -1, et errno contient le code d'erreur.
ERREURS
EFAULT La table fournie en argument n'est pas dans l'espace d'adressage
du processus appelant.
EINTR Un signal a ete recu avant qu'un evenement interessant ne se
produise ; voir signal(7).
EINVAL La valeur nfds depasse la valeur RLIMIT_NOFILE.
ENOMEM Pas assez de memoire pour allouer la table des descripteurs de
fichier.
VERSIONS
L'appel systeme poll() a ete introduit dans la version 2.1.23 du noyau
Linux. La fonction de bibliotheque poll() est apparue dans la version
5.4.28 de la libc, et fournit une emulation basee sur l'appel systeme
select(2) si le noyau n'a pas d'appel systeme poll().
L'appel systeme ppoll() a ete introduit dans Linux 2.6.16. La fonction
de bibliotheque correspondante a ete ajoutee dans la glibc 2.4.
CONFORMIT'E
poll() est conforme a POSIX.1-2001. ppoll() est specifique a Linux.
NOTES
Certaines implementations definissent la constante symbolique non
standard INFTIM de valeur -1, a utiliser comme timeout pour poll().
Cette constante n'est pas fournie par la glibc.
Notes sur Linux
L'appel systeme ppoll() sous Linux modifie son argument timeout_ts.
Cependant, l'enrobage fourni par la glibc cache ce comportement en
utilisant une variable locale pour le delai, qui est fournie a l'appel
systeme. La fonction ppoll() de la glibc ne modifie donc pas son
argument timeout_ts.
BOGUES
Consultez la discussion sur les notifications non voulues dans la
section BOGUES de select(2).
VOIR AUSSI
select(2), select_tut(2), time(7)
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.