Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

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
       #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), feature_test_macros(7), time(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  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> >>.