POLL

Section: Manuel du programmeur Linux (2)
Updated: 30 juillet 2003
Index


NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTES
VOIR AUSSI
TRADUCTION

NOM

poll - Attendre un événement concernant un descripteur de fichier.

SYNOPSIS

#include <linux/asm/poll.h>
int poll(struct pollfd *ufds, unsigned int nfds, int délai);

DESCRIPTION

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

VALEUR RENVOYÉE

S'il réussit, poll renvoie une valeur positive représentant le nombre de structures ayant un champ revents non-nul. C'est à dire le nombre de structures pour lesquels un événement attendu, ou une erreur, s'est produit. Une valeur de retour nulle indique un dépassement du délai d'attente. S'il échoue, poll renvoie -1, et errno contient le code d'erreur.

ERREURS

EBADF
Un descripteur de fichier invalide est présent dans un ensemble.
ENOMEM
Pas assez de mémoire pour allouer la table des descripteurs de fichiers.
EFAULT
La table fournie en argument n'est pas dans l'espace d'adressage du processus appelant.
EINTR
Un signal a été reçu avant qu'un événement intéressant ne se produise.

CONFORMITÉ

XPG4-UNIX

NOTES

L'appel système poll() a été introduit dans la version 2.1.23 du noyau Linux. La fonction de bibliothèque poll() est apparue dans la version 5.4.28 de la libc, et fournit une émulation basée sur l'appel système select() si le noyau n'a pas d'appel système poll().

VOIR AUSSI

TRADUCTION

Christophe Blaess, 1996-2003.