.\" -*- coding: UTF-8 -*- .\" This manpage is copyright (C) 1992 Drew Eckhardt, .\" copyright (C) 1995 Michael Shields, .\" copyright (C) 2001 Paul Sheer, .\" copyright (C) 2006, 2019 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 .\" .\" Modified 1993-07-24 by Rik Faith .\" Modified 1995-05-18 by Jim Van Zandt .\" Sun Feb 11 14:07:00 MET 1996 Martin Schulze .\" * layout slightly modified .\" .\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond .\" Modified Thu Feb 24 01:41:09 CET 2000 by aeb .\" Modified Thu Feb 9 22:32:09 CET 2001 by bert hubert , aeb .\" Modified Mon Nov 11 14:35:00 PST 2002 by Ben Woodard .\" 2005-03-11, mtk, modified pselect() text (it is now a system .\" call in 2.6.16. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SELECT 2 "1 novembre 2020" Linux "Manuel du programmeur Linux" .SH NOM select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- Multiplexage d'entrées\-sorties synchrones .SH SYNOPSIS .nf \fB#include \fP .PP \fBint select(int \fP\fInfds\fP\fB, fd_set *\fP\fIreadfds\fP\fB, fd_set *\fP\fIwritefds\fP\fB,\fP \fB fd_set *\fP\fIexceptfds\fP\fB, struct timeval *\fP\fItimeout\fP\fB);\fP .PP \fBvoid FD_CLR(int \fP\fIfd\fP\fB, fd_set *\fP\fIset\fP\fB);\fP \fBint FD_ISSET(int \fP\fIfd\fP\fB, fd_set *\fP\fIset\fP\fB);\fP \fBvoid FD_SET(int \fP\fIfd\fP\fB, fd_set *\fP\fIset\fP\fB);\fP \fBvoid FD_ZERO(fd_set *\fP\fIset\fP\fB);\fP .PP \fBint pselect(int \fP\fInfds\fP\fB, fd_set *\fP\fIreadfds\fP\fB, fd_set *\fP\fIwritefds\fP\fB,\fP \fB fd_set *\fP\fIexceptfds\fP\fB, const struct timespec *\fP\fItimeout\fP\fB,\fP \fB const sigset_t *\fP\fIsigmask\fP\fB);\fP .fi .PP .RS -4 Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7))\ : .RE .PP \fBpselect\fP(): _POSIX_C_SOURCE\ >=\ 200112L .SH DESCRIPTION \fBselect\fP() permet à un programme de surveiller plusieurs descripteurs de fichier, en attendant qu'au moins l'un de ces descripteurs soit «\ prêt\ » pour une certaine classe d'opérations d'entrée\-sortie (par exemple une entrée est possible). Un descripteur de fichier est considéré comme prêt s'il est possible d'effectuer l'opération correspondante (par exemple \fBread\fP(2) ou un \fBwrite\fP(2) assez petit) sans bloquer. .PP .\" \fBselect\fP() ne peut surveiller que des numéros de descripteurs de fichier inférieurs à \fBFD_SETSIZE\fP\ ; \fBpoll\fP(2) et \fBepoll\fP(7) n'ont pas cette limitation. Voir les BOGUES. .SS "Ensembles de descripteurs de fichier" Les paramètres principaux de \fBselect\fP() sont trois «\ ensembles\ » de descripteurs de fichier (déclarés avec le type \fIfd_set\fP), qui permettent à l'appelant d'attendre trois classes d'événements sur l'ensemble de descripteurs de fichier indiqué. Chacun des paramètres de \fIfd_set\fP peut être indiqué comme NULL si aucun descripteur de fichier ne doit être surveillé pour la classe d'événements correspondante. .PP \fBNotez bien\fP\ : lors du renvoi, chacun des ensembles de descripteurs de fichier est modifié pour indiquer les descripteurs actuellement «\ prêts\ ». Ainsi, si on utilise \fBselect\fP() dans une boucle, alors les ensembles \fIdoivent être réinitialisés\fP avant chaque appel. L'implémentation des paramètres \fIfd_set\fP en tant que paramètres valeur\-résultat est une erreur de conception évitée dans \fBpoll\fP(2) et \fBepoll\fP(7). .PP Le contenu d'un ensemble de descripteurs de fichier peut être manipulé en utilisant les macros suivantes\ : .TP \fBFD_ZERO\fP() Cette macro efface (supprime tous les descripteurs de fichier) \fIset\fP. Elle doit être utilisée en tant que première étape de l'initialisation d'un ensemble de descripteurs de fichier. .TP \fBFD_SET\fP() Cette macro ajoute le descripteur de fichier \fIfd\fP à \fIset\fP. L'ajout d'un descripteur de fichier déjà présent dans l'ensemble est sans effet et ne produit pas d'erreur. .TP \fBFD_CLR\fP() Cette macro supprime le descripteur de fichier \fIfd\fP de \fIset\fP. La suppression d'un descripteur de fichier non présent dans l'ensemble est sans effet et ne produit pas d'erreur. .TP \fBFD_ISSET\fP() .\" \fBselect\fP() modifie le contenu des ensembles en fonction des règles décrites ci\-dessous. Après un appel à \fBselect\fP(), la macro \fBFD_ISSET\fP() peut être utilisée pour tester si un descripteur de fichier est présent dans un ensemble. \fBFD_ISSET\fP() ne renvoie pas zéro si le descripteur de fichier \fIfd\fP est présent dans \fIset\fP, sinon il le renvoie. .SS Arguments Les paramètres de \fBselect\fP() sont les suivants\ : .TP \fIreadfds\fP Les descripteurs de fichier de cet ensemble sont surveillés pour voir s'ils sont prêts en lecture. Un descripteur de fichier est prêt si une opération de lecture ne bloquera pas\ ; en particulier, le descripteur de fichier est prêt sur une fin\-de\-fichier. .IP Après que \fBselect\fP() ait renvoyé, \fIreadfds\fP sera vidé de tous les descripteurs de fichier sauf ceux prêts en lecture. .TP \fIwritefds\fP Les descripteurs de fichier de cet ensemble sont surveillés pour voir s'ils sont prêts en écriture. Un descripteur de fichier est prêt si une opération d'écriture ne bloquera pas. Cependant, même si un descripteur de fichier est indiqué comme inscriptible, une écriture abondante peut toujours bloquer. .IP Après que \fBselect\fP() ait renvoyé, \fIwritefds\fP() sera vidé de tous les descripteurs de fichier, sauf ceux prêts en écriture. .TP \fIexceptfds\fP Les descripteurs de fichier de cet ensemble sont surveillés en cas de «\ conditions exceptionnelles\ ». Pour des exemples de conditions exceptionnelles, voir le point sur \fBPOLLPRI\fP dans \fBpoll\fP(2). .IP Après que \fBselect\fP() ait renvoyé, \fIexceptfds\fP() sera vidé de tous les descripteurs de fichier, sauf ceux où s'est produite une condition exceptionnelle. .TP \fInfds\fP Ce paramètre doit être positionné sur le numéro du plus grand descripteur des trois ensembles, plus \fB1\fP. Les descripteurs de fichier indiqués dans chaque ensemble sont vérifiés dans cette limite (mais voir BOGUES). .TP \fItimeout\fP L'argument \fItimeout\fP est une structure \fItimeval\fP (décrite ci\-dessous) qui précise la durée de l'intervalle pendant lequel \fBselect\fP() restera bloqué dans l'attente d'un descripteur de fichier disponible. L'appel restera bloqué jusqu'à\ : .RS .IP \(bu 2 un descripteur de fichier devient prêt\ ; .IP \(bu l’appel est interrompu par un gestionnaire de signal\ ; .IP \(bu le délai expire. .RE .IP Notez que l'intervalle \fItimeout\fP est arrondi selon la granularité de l'horloge du système, et un retard d'ordonnancement du noyau peut entraîner un léger dépassement de la durée de blocage. .IP Si les deux champs de la structure \fItimeval\fP valent zéro, \fBselect\fP() renvoie immédiatement (c'est utile pour la scrutation). .IP .\" Si \fItimeout\fP est indiqué comme étant NULL, \fBselect\fP() restera bloqué dans l'attente d'un descripteur de fichier disponible\ : .SS pselect() L'appel système \fBpselect\fP() permet à une application d'attendre de manière sécurisée un signal ou qu'un descripteur de fichier soit prêt. .PP \fBselect\fP() et \fBpselect\fP() ont un comportement identique, avec trois différences\ : .IP \(bu 2 La fonction \fBselect\fP() utilise un délai exprimé avec une \fIstruct timeval\fP (en secondes et microsecondes), alors que \fBpselect\fP() utilise une \fIstruct timespec\fP (en secondes et nanosecondes). .IP \(bu La fonction \fBselect\fP() peut modifier le paramètre \fItimeout\fP pour indiquer le temps restant. La fonction \fBpselect\fP() ne change pas ce paramètre. .IP \(bu La fonction \fBselect\fP() n'a pas de paramètre \fIsigmask\fP et se comporte comme \fBpselect\fP() avec une valeur NULL pour \fIsigmask\fP .PP \fIsigmask\fP est un pointeur sur un masque de signaux (consultez \fBsigprocmask\fP(2)). S'il n'est pas NULL, alors \fBpselect\fP() remplace d'abord le masque de signaux en cours par celui indiqué dans \fIsigmask\fP, puis invoque la fonction «\ select\ », et enfin restaure le masque de signaux à nouveau (si \fIsigmask\fP est NULL, le masque de signaux n'est pas modifié pendant l'appel \fBpselect\fP()). .PP Mise à part la différence de précision de l'argument \fItimeout\fP, l'appel \fBpselect\fP() suivant\ : .PP .in +4n .EX ready = pselect(nfds, &readfds, &writefds, &exceptfds, timeout, &sigmask); .EE .in .PP est équivalent à exécuter de façon \fIatomique\fP les appels suivants\ : .PP .in +4n .EX sigset_t origmask; pthread_sigmask(SIG_SETMASK, &sigmask, &origmask); ready = select(nfds, &readfds, &writefds, &exceptfds, timeout); pthread_sigmask(SIG_SETMASK, &origmask, NULL); .EE .in .PP La raison de la présence de \fBpselect\fP() est que pour l'attente d'un événement, que ce soit un signal ou une condition sur un descripteur, un test atomique est nécessaire pour éviter les situations de concurrence. (Supposons que le gestionnaire de signaux active un drapeau global et renvoie. Alors un test de ce drapeau, suivi d'un appel \fBselect\fP() peut bloquer indéfiniment si le signal arrive juste après le test mais avant l'appel. À l'inverse, \fBpselect\fP() permet de bloquer les signaux d'abord, traiter les signaux déjà reçus, puis invoquer \fBpselect\fP() avec le \fIsigmask\fP désiré, en évitant la situation de concurrence.) .SS "Délai " Le paramètre \fItimeout\fP de \fBselect\fP() est une structure du type suivant\ : .PP .in +4n .EX struct timeval { time_t tv_sec; /* secondes */ suseconds_t tv_usec; /* microsecondes */ }; .EE .in .PP Le paramètre correspondant à \fBpselect\fP() a le type suivant\ : .PP .in +4n .EX struct timespec { time_t tv_sec; /* secondes */ long tv_nsec; /* nanosecondes */ }; .EE .in .PP .\" .PP - it is rumored that: .\" On BSD, when a timeout occurs, the file descriptor bits are not changed. .\" - it is certainly true that: .\" Linux follows SUSv2 and sets the bit masks to zero upon a timeout. Sous Linux, la fonction \fBselect\fP() modifie \fItimeout\fP pour indiquer le temps non endormi\ ; la plupart des autres implémentations ne le font pas (POSIX.1 autorise les deux comportements). Cela pose des problèmes à la fois pour porter sur d'autres systèmes du code développé sous Linux qui utilise cette valeur de \fItimeout\fP modifiée, et pour porter sous Linux du code qui réutilise plusieurs fois la \fIstruct timeval\fP pour plusieurs \fBselect\fP()s dans une boucle sans la réinitialiser. La meilleure attitude à adopter est de considérer \fItimeout\fP comme indéfini après le retour de \fBselect\fP(). .SH "VALEUR RENVOYÉE" En cas de réussite \fBselect\fP() et \fBpselect\fP() renvoient le nombre de descripteurs dans les trois ensembles de descripteurs renvoyés (c'est\-à\-dire le nombre total de bits définis dans \fIreadfds\fP, \fIwritefds\fP et \fIexceptfds\fP) qui peut être nul si le délai d’expiration a été atteint avant qu'un descripteur de fichier ne soit prêt. .PP En cas d'erreur, la valeur de retour est \fB\-1\fP et \fIerrno\fP est définie pour préciser l'erreur\ ; les ensembles de descripteurs de fichiers ne sont pas modifiés et \fItimeout\fP devient indéfini. .SH ERREURS .TP \fBEBADF\fP Un descripteur de fichier non valable était dans l'un des ensembles (peut\-être un descripteur déjà fermé ou sur lequel une erreur s'est produite).Cependant, consultez BOGUES .TP \fBEINTR\fP Un signal a été intercepté\ ; consultez \fBsignal\fP(7). .TP \fBEINVAL\fP \fInfds\fP est négatif ou dépasse la limite de ressource \fBRLIMIT_NOFILE\fP (voir \fBgetrlimit\fP(2)). .TP \fBEINVAL\fP La valeur contenue dans \fItimeout\fP n'est pas valable. .TP \fBENOMEM\fP Incapacité d'allouer de la mémoire pour des tables internes. .SH VERSIONS \fBpselect\fP() a été ajouté à Linux dans le noyau\ 2.6.16. Précédemment, \fBpselect\fP() était émulé dans la glibc (mais voir la section BOGUES). .SH CONFORMITÉ \fBselect\fP() est conforme à POSIX.1\-2001, POSIX.1\-2008 et 4.4BSD (la fonction \fBselect\fP() est apparue dans 4.2BSD). Généralement portable depuis ou vers des systèmes non BSD gérant des clones de la couche sockets BSD (y compris les variantes de System\ V). Néanmoins, sachez que les variantes de System\ V définissent la variable \fItimeout\fP avant le retour alors que les variantes BSD ne le font pas. .PP \fBpselect\fP() est défini dans POSIX.1g ainsi que dans POSIX.1\-2001 et POSIX.1\-2008. .SH NOTES Un ensemble \fIfd_set\fP est un tampon de taille fixe. Exécuter \fBFD_CLR\fP() ou \fBFD_SET\fP() avec \fIfd\fP négatif ou supérieur ou égal à \fBFD_SETSIZE\fP résultera en un comportement indéfini. Plus encore, POSIX demande que \fIfd\fP soit un descripteur de fichier valable. .PP Les opérations \fBselect\fP() et \fBpselect\fP() ne sont pas concernées par l'attribut \fBO_NONBLOCK\fP. .PP .\" Darwin, according to a report by Jeremy Sequoia, relayed by Josh Triplett .\" Sur d'autres systèmes UNIX, \fBselect\fP() peut échouer avec l'erreur \fBEAGAIN\fP si le système ne parvient pas à allouer des ressources internes du noyau contrairement à l'erreur \fBENOMEM\fP de Linux. POSIX spécifie cette erreur pour \fBpoll\fP(2) mais pas pour \fBselect\fP(2). Des programmes portables peuvent souhaiter vérifier \fBEAGAIN\fP et la boucle comme avec \fBEINTR\fP. .SS "L'astuce du « self\-pipe »" .\" Sur les systèmes sans \fBpselect\fP, une gestion plus sûre (et plus portable) des signaux peut être obtenue en utilisant l'astuce du «\ self\-pipe\ »\ : un gestionnaire de signal écrit un octet dans un tube dont \fBselect\fP() dans le programme principal surveille l'autre extrémité. (Pour éviter la possibilité de blocage lors de l'écriture dans un tube pouvant être plein ou de la lecture dans un tube pouvant être vide, des entrées et sorties non bloquantes sont utilisées pour la lecture et l'écriture dans le tube.) .SS "Émuler usleep(3)" .\" Avant l'arrivée de \fBusleep\fP(3), certaines applications appelaient \fBselect\fP() avec trois ensembles de descripteurs vides, \fInfds\fP nul et un délai \fItimeout\fP non NULL, afin d'endormir, de manière portable, le processus avec une précision plus fine que la seconde. .SS "Correspondance entre les notifications de select() et de poll()" .\" fs/select.c Dans les sources du noyau Linux, nous trouvons les définitions suivantes qui montrent la correspondance entre les notifications de lisibilité, d'inscriptibilité et de condition exceptionnelle de \fBselect\fP() et les notifications d'événements fournies par \fBpoll\fP(2) et \fBepoll\fP(7)\ : .PP .in +4n .EX #define POLLIN_SET (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN | EPOLLHUP | EPOLLERR) /* Prêt en lecture */ #define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT | EPOLLERR) /* Prêt en écriture */ #define POLLEX_SET (EPOLLPRI) /* Condition exceptionnelle */ .EE .in .\" .SS "Programmes multithreadés" .\" Si un descripteur de fichier surveillé par \fBselect\fP() est fermé dans un autre thread, le résultat est indéterminé. Sur certains systèmes UNIX, \fBselect\fP() débloque et termine, avec une indication que le descripteur de fichier est prêt (une opération entrée/sortie ultérieure risque d'échouer avec une erreur, sauf si le descripteur de fichier a été réouvert entre le moment où \fBselect\fP() termine et l'exécution des opérations entrée/sortie). Sur Linux (et d'autres systèmes), la fermeture du descripteur de fichier dans un autre thread n'a aucun effet sur \fBselect\fP(). En résumé, toute application qui s'appuie sur un comportement particulier dans ce scénario doit être considérée comme boguée. .SS "différences entre bibliothèque C et noyau" Le noyau Linux autorise les ensembles de descripteurs de fichier de n'importe quelle taille, en déterminant la taille des ensembles à vérifier à partir de la valeur de \fInfds\fP. Cependant, dans l'implémentation de la glibc, le type \fIfd_set\fP a une taille fixe. Voir aussi les BOGUES. .PP L'interface \fBpselect\fP() décrite dans cette page est implémentée par la glibc. L'appel système Linux sous\-jacent est appelé \fBpselect6\fP(). Cet appel système a un comportement quelque peu différent de la fonction d'enveloppe de la glibc. .PP L'appel système \fBpselect6\fP() de Linux modifie son argument \fItimeout\fP. Cependant, la fonction d'enveloppe de la glibc cache ce comportement en utilisant une variable locale pour l'argument \fItimeout\fP qui est passé à l'appel système. Par conséquent, la fonction \fBpselect\fP() de la glibc ne modifie pas son paramètre \fItimeout\fP, ce qui est le comportement prescrit par POSIX.1\-2001. .PP Le dernier argument de l'appel système \fBpselect6\fP() n'est pas un pointeur \fIsigset_t\ *\fP, mais une structure de la forme suivante\ : .PP .in +4n .EX struct { const kernel_sigset_t *ss; /* Pointeur vers un ensemble de signaux */ size_t ss_len; /* Taille (en octets) de l'objet vers lequel pointe \(aqss\(aq */ }; .EE .in .PP .\" Cela permet à l'appel système d'obtenir à la fois le pointeur vers l'ensemble de signaux et sa taille, tout en permettant à la plupart des architectures de ne prendre en charge qu'un maximum de 6\ arguments pour un appel système. Voir \fBsigprocmask\fP(2) pour un point sur la différence entre la vision du noyau et celle de la libc de l'ensemble de signaux. .SS "Détails historiques sur la glibc" La glibc 2.0 fournissait une mauvaise version de \fBpselect\fP() qui n'avait pas d'argument \fIsigmask\fP. .PP Dans les versions de la glibc 2.1 à 2.2.1, on peut définir \fB_GNU_SOURCE\fP afin d'obtenir la déclaration de \fBpselect\fP() depuis \fI\fP. .SH BOGUES POSIX autorise une implémentation à définir une limite supérieure indiquée à l'aide de la constante \fBFD_SETSIZE\fP, dans l'intervalle de descripteurs de fichier qui peuvent être indiqués dans un ensemble de descripteurs de fichier. Le noyau Linux n'impose pas de limite fixe mais l'implémentation de la glibc fait que \fIfd_set\fP est un type de taille fixe, où \fBFD_SETSIZE\fP est défini à 1024 et où les macros \fBFD_*\fP() agissent en fonction de cette limite. Pour surveiller des descripteurs de fichier supérieurs à 1023, utilisez plutôt \fBpoll\fP(2) ou \fBepoll\fP(7). .PP Selon POSIX, \fBselect\fP() devrait vérifier tous les descripteurs de fichier des trois ensembles jusqu'à \fInfds\-1\fP. Cependant, l'implémentation actuelle ignore tout descripteur de fichier dans ces ensembles supérieur au numéro le plus élevé de descripteur de fichier que le processus a ouvert. Selon POSIX, un tel descripteur de fichier indiqué dans l'un des ensembles devrait provoquer une erreur \fBEBADF\fP. .PP À partir de la version 2.1, la glibc fournissait une émulation de \fBpselect\fP() implémentée avec \fBsigprocmask\fP(2) et \fBselect\fP(). Cette implémentation était vulnérable à la condition de concurrence que \fBpselect\fP() était conçu pour éviter. Les versions récentes de la glibc utilisent l'appel système \fBpselect\fP() (sans risque de concurrence) si le noyau le fournit. .PP .\" Stevens discusses a case where accept can block after select .\" returns successfully because of an intervening RST from the client. .\" Maybe the kernel should have returned EIO in such a situation? Sous Linux, \fBselect\fP() peut signaler un descripteur de fichier socket comme «\ prêt à lire\ » alors qu'une lecture suivante bloque. Cela peut, par exemple, survenir lorsque des données sont arrivées mais, après vérification, ont une mauvaise somme de contrôle et sont rejetées. Cela peut également arriver dans d'autres circonstances dans lesquelles le descripteur de fichier est faussement signalé comme prêt. Aussi, il est plus sûr d'utiliser \fBO_NONBLOCK\fP sur des sockets qui ne devraient pas bloquer. .PP Sous Linux, \fBselect\fP() modifie également \fItimeout\fP si l'appel est interrompu par un gestionnaire de signaux (code d'erreur \fBEINTR\fP). Cela est interdit par POSIX.1. L'appel système \fBpselect\fP() de Linux se comporte de la même façon, mais la glibc cache cette particularité en copiant \fItimeout\fP vers une variable locale et en passant cette variable à l'appel système. .SH EXEMPLES .EX #include #include #include int main(void) { fd_set rfds; struct timeval tv; int retval; /* Surveiller stdin (fd 0) en attente d'entrées */ FD_ZERO(&rfds); FD_SET(0, &rfds); /* Attendre jusqu'à 5 secondes. */ tv.tv_sec = 5; tv.tv_usec = 0; retval = select(1, &rfds, NULL, NULL, &tv); /* Ne pas s'appuyer sur la valeur de tv maintenant ! */ if (retval == \-1) perror("select()"); else if (retval) printf("Des données sont disponibles maintenant\en"); /* FD_ISSET(0, &rfds) est alors vrai. */ else printf("Aucune donnée durant les cinq secondes.\en"); exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" \fBaccept\fP(2), \fBconnect\fP(2), \fBpoll\fP(2), \fBread\fP(2), \fBrecv\fP(2), \fBrestart_syscall\fP(2), \fBsend\fP(2), \fBsigprocmask\fP(2), \fBwrite\fP(2), \fBepoll\fP(7), \fBtime\fP(7) .PP Pour un tutoriel avec des exemples, consultez \fBselect_tut\fP(2). .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Cédric Boutillier , Frédéric Hantrais , Jean-Philippe MENGUAL et Jean-Pierre Giraud . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .