poll - Attendre un événement concernant un descripteur de fichier.
poll
est une variation sur le thème de
select(2).
Il utilise une table de
nfds
structures du type
struct pollfd {
int fd; /* Descripteur de fichier */
short events; /* Événements attendus */
short revents; /* Événements détectés */
};
et un
délai
en millisecondes. Une valeur négative indique un délai infini.
Le champ
fd
contient un descripteur de fichier ouvert.
Le champ
events
est un paramètre d'entrée, un masque de bits indiquant les événements
qui intéressent l'application.
Le champ
revents
est un paramètre de sortie, rempli par le noyau avec les événements qui
se sont effectivement produits, du type demandé, 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 positionnés dans la valeur de retour
revents
si l'une des conditions correspondantes se produit).
Si aucun événement attendu (ni aucune erreur) ne s'est déjà produit, le noyau
attend leur occurrence pendant
timeout
millisecondes.
Les bits possibles pour ces masques sont définis dans <
sys/poll.h> :
#define POLLIN 0x0001 /* Données disponibles en lecture */
#define POLLPRI 0x0002 /* Données urgentes disponibles */
#define POLLOUT 0x0004 /* Une écriture ne bloquera pas */
#define POLLERR 0x0008 /* Condition d'erreur */
#define POLLHUP 0x0010 /* Déconnexion */
#define POLLNVAL 0x0020 /* Requête invalide, fd pas ouvert */
Pour un fichier source XPG4.2, on a aussi :
#ifdef _XOPEN_SOURCE
#define POLLRDNORM 0x0040 /* Données normales prêtes à lire */
#define POLLRDBAND 0x0080 /* Données prioritaires à lire */
#define POLLWRNORM 0x0100 /* Écriture normale possible */
#define POLLWRBAND 0x0200 /* Écriture prioritaire possible */
#endif
De plus, Linux connait une constante
#ifdef _GNU_SOURCE
#define POLLMSG 0x0400
#endif
Christophe Blaess, 1996-2003.