.\" Copyright (C) 1997 Andries Brouwer (aeb@cwi.nl) .\" and Copyright (C) 2006, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Additions from Richard Gooch and aeb, 971207 .\" 2006-03-13, mtk, Added ppoll() + various other rewordings .\" 2006-07-01, mtk, Added POLLRDHUP + various other wording and .\" formatting changes. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH POLL 2 "31 janvier 2014" Linux "Manuel du programmeur Linux" .SH NOM poll, ppoll \- Attendre un événement concernant un descripteur de fichier .SH SYNOPSIS .nf \fB#include \fP .sp \fBint poll(struct pollfd *\fP\fIfds\fP\fB, nfds_t \fP\fInfds\fP\fB, int \fP\fItimeout\fP\fB);\fP .sp \fB#define _GNU_SOURCE\fP /* Consultez feature_test_macros(7) */ \fB#include \fP .sp \fBint ppoll(struct pollfd *\fP\fIfds\fP\fB, nfds_t \fP\fInfds\fP\fB, \fP \fB const struct timespec *\fP\fItimeout_ts\fP\fB, const sigset_t *\fP\fIsigmask\fP\fB);\fP .fi .SH DESCRIPTION \fBpoll\fP() est une variation sur le thème de \fBselect\fP(2)\ : il attend que l'un des descripteurs de fichier soit prêt pour des entrées\-sorties. L'ensemble de descripteurs de fichier à surveiller est indiqué dans l'argument \fIfds\fP, qui est un tableau de structures de la forme suivante\ : .in +4n .nf struct pollfd { int fd; /* Descripteur de fichier */ short events; /* Événements attendus */ short revents; /* Événements détectés */ }; .in .fi .PP L'appelant doit spécifier le nombre d'élément du tableau \fIfds\fP dans \fInfds\fP. Le champ \fIfd\fP contient un descripteur de fichier pour un fichier ouvert. Si ce champ est négatif, alors le champ \fIevents\fP correspondant est ignoré et le champ \fIrevents\fP renvoie zéro (cela permet d'ignorer facilement un descripteur de fichier pour un seul appel \fBpoll\fP()\ : il suffit d'utiliser l'opposé du champ \fIfd\fP). Le champ \fIevents\fP est un paramètre d'entrée, un masque de bits indiquant les événements qui intéressent l'application pour le descripteur de fichier \fIfd\fP. Ce champ peut être nul, auquel cas les seuls événements qui peuvent être renvoyés dans \fIrevents\fP sont \fBPOLLHUP\fP, \fBPOLLERR\fP et \fBPOLLNVAL\fP (voir ci\-dessous). Le champ \fIrevents\fP est un paramètre de sortie, rempli par le noyau avec les événements qui se sont effectivement produits, d'un des types demandés par \fIevents\fP, ou de l'une des valeurs \fBPOLLERR\fP, \fBPOLLHUP\fP ou \fBPOLLNVAL\fP. (Ces trois bits n'ont pas de signification dans la demande \fIevents\fP, et se trouvent positionnés dans la valeur de retour \fIrevents\fP si l'une des conditions correspondantes se produit.) Si aucun événement attendu (ni aucune erreur) ne s'est déjà produit, \fBpoll\fP() bloque jusqu'à ce que l'un des événements se produise. L'argument \fItimeout\fP définit le temps en milliseconde pendant lequel \fBpoll\fP() devrait bloquer en attendant que le descripteur de fichier soit prêt. L’appel bloquera jusqu’au premier événement suivant\ : .IP * 3 un descripteur de fichier devient prêt\ ; .IP * l’appel est interrompu par un gestionnaire de signal\ ; .IP * 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é. Une valeur négative de \fItimeout\fP signifie un délai infini, alors qu'un \fItimeout\fP nul force \fBepoll\fP() à se terminer immédiatement, même si aucun descripteur de fichier n'est prêt. Les bits qui peuvent être activés ou renvoyés dans \fIevents\fP et \fIrevents\fP sont définis par \fI\fP\ : .RS .TP \fBPOLLIN\fP Il y a des données en attente de lecture. .TP \fBPOLLPRI\fP Il y a des données urgentes en attente de lecture (par exemple, des données hors bande sur une socket TCP, ou bien un pseudoterminal maître en mode paquet constatant un changement d'état de l'esclave). .TP \fBPOLLOUT\fP Une écriture ne bloquera pas. .TP \fBPOLLRDHUP\fP (depuis Linux 2.6.17) Le correspondant sur une socket en mode flux a fermé la connexion, ou bien a terminé la partie écriture de la connexion. La macro de test de fonctionnalité \fB_GNU_SOURCE\fP doit être définie (avant d'inclure \fItout\fP fichier d'en\(hytête) pour obtenir cette définition. .TP \fBPOLLERR\fP Condition d'erreur (uniquement en sortie). .TP \fBPOLLHUP\fP Le correspondant a fermé la connexion (uniquement en sortie). .TP \fBPOLLNVAL\fP Requête invalide\ : \fIfd\fP n'est pas ouvert (uniquement en sortie). .RE .PP Lorsque \fB_XOPEN_SOURCE\fP est défini à la compilation, les macros suivantes sont également définies (mais n'apportent pas d'informations supplémentaires par rapport aux bits listés ci\(hydessus\ : .RS .TP \fBPOLLRDNORM\fP Équivalent à \fBPOLLIN\fP. .TP \fBPOLLRDBAND\fP .\" POLLRDBAND is used in the DECnet protocol. Des données prioritaires sont en attente de lecture (généralement inutilisé sous Linux). .TP \fBPOLLWRNORM\fP Équivalent à \fBPOLLOUT\fP. .TP \fBPOLLWRBAND\fP Des données prioritaires peuvent être écrites. .RE .PP Linux connaît aussi \fBPOLLMSG\fP, mais ne l'utilise pas. .SS ppoll() La relation entre \fBpoll\fP() et \fBppoll\fP() est similaire à la relation entre \fBselect\fP(2) et \fBpselect\fP(2)\ : de même que \fBpselect\fP(2), \fBppoll\fP() permet à une application d'attendre de façon sûre que soit un descripteur de fichier soit prêt, soit un signal soit reçu. .PP Mise à part la différence de précision de l'argument \fItimeout\fP, l'appel \fBppoll\fP() suivant\ : .nf ready = ppoll(&fds, nfds, timeout_ts, &sigmask); .fi est équivalent à exécuter de façon \fIatomique\fP les appels suivants\ : .nf 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); .fi .PP Consultez la description de \fBpselect\fP(2) pour une explication de la nécessité de \fBppoll\fP(). Si le paramètre \fIsigmask\fP est défini comme NULL, aucune manipulation de masque de signaux n'est effectuée (et ainsi \fBppoll\fP() ne diffère de \fBpoll\fP() que dans la précision du paramètre \fItimeout\fP). L'argument \fItimeout_ts\fP définit une limite supérieure sur le temps pendant lequel \fBppoll\fP() bloquera. Cet argument est pointe vers une structure de la forme suivante\ : .in +4n .nf struct timespec { long tv_sec; /* secondes */ long tv_nsec; /* nanosecondes */ }; .fi .in Si \fItimeout_ts\fP est NULL, \fBppoll\fP() pourra bloquer indéfiniment. .SH "VALEUR RENVOYÉE" En cas de réussite, ces appels renvoient une valeur positive représentant le nombre de structures ayant un champ \fIrevents\fP 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. En cas d'échec, ils renvoient \-1, et \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEFAULT\fP La table fournie en argument n'est pas dans l'espace d'adressage du processus appelant. .TP \fBEINTR\fP Un signal a été reçu avant qu'un événement intéressant ne se produise\ ; voir \fBsignal\fP(7). .TP \fBEINVAL\fP La valeur \fInfds\fP dépasse la valeur \fBRLIMIT_NOFILE\fP. .TP \fBENOMEM\fP Pas assez de mémoire pour allouer la table des descripteurs de fichier. .SH VERSIONS .\" library call was introduced in libc 5.4.28 L'appel système \fBpoll\fP() a été introduit dans Linux\ 2.1.23. Sur les anciens noyaux sans cet appel système, la fonction enveloppe \fBpoll\fP() de la glibc (et de l'ancienne libc Linux) fournit une émulation en utilisant \fBselect\fP(2). L'appel système \fBppoll\fP() a été introduit dans Linux 2.6.16. La fonction de bibliothèque correspondante a été ajoutée dans la glibc 2.4. .SH CONFORMITÉ .\" NetBSD 3.0 has a pollts() which is like Linux ppoll(). \fBpoll\fP() est conforme à POSIX.1\-2001. \fBppoll\fP() est spécifique à Linux. .SH NOTES Certaines implémentations définissent la constante symbolique non standard \fBINFTIM\fP de valeur \-1, à utiliser comme \fItimeout\fP pour \fBpoll\fP(). Cette constante n'est pas fournie par la glibc. Consultez \fBselect\fP(2) pour une discussion sur ce qui pourrait arriver si un descripteur de fichier surveillé par \fBpoll\fP() est fermé dans un autre thread. .SS "Notes sur Linux" L'appel système \fBppoll\fP() sous Linux modifie son argument \fItimeout_ts\fP. Cependant, l'enrobage fourni par la glibc cache ce comportement en utilisant une variable locale pour le délai, qui est fournie à l'appel système. La fonction \fBppoll\fP() de la glibc ne modifie donc pas son argument \fItimeout_ts\fP. .SH BOGUES Consultez la discussion sur les notifications non voulues dans la section BOGUES de \fBselect\fP(2). .SH "VOIR AUSSI" \fBrestart_syscall\fP(2), \fBselect\fP(2), \fBselect_tut\fP(2), \fBtime\fP(7) .SH COLOPHON Cette page fait partie de la publication 3.65 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse \%http://www.kernel.org/doc/man\-pages/. .SH TRADUCTION Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a par l'équipe de traduction francophone au sein du projet perkamon . .PP Christophe Blaess (1996-2003), Alain Portal (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian\ (2006-2009). .PP Veuillez signaler toute erreur de traduction en écrivant à ou par un rapport de bogue sur le paquet \fBmanpages\-fr\fR. .PP Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande «\ \fBman\ \-L C\fR \fI
\fR\ \fI\fR\ ».