.\" -*- 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 november 2020" Linux "Linux Programmeurs Handleiding" .SH NAAM select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- gelijktijdige In/Uit verdeling .SH SAMENVATTING .nf \fB#include \fP .PP \fBint select(int \fP\fInfds\fP\fB, fd_set *\fP\fIleesbi\fP\fB, fd_set *\fP\fIschrijfbi\fP\fB,\fP \fB fd_set *\fP\fIuitzondbi\fP\fB, struct timeval *\fP\fItijdslimiet\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\fItijdslimiet\fP\fB,\fP \fB const sigset_t *\fP\fIsigmask\fP\fB);\fP .fi .PP .RS -4 Feature Test Macro´s eisen in glibc (zie \fBfeature_test_macros\fP(7)): .RE .PP \fBpselect\fP(): _POSIX_C_SOURCE\ >=\ 200112L .SH BESCHRIJVING \fBselect\fP() staat een programma toe meerdere bestandsindicators te monitoren, het wacht totdat een of meer bestandsindicators "gereed" worden voor een aantal klassen van Invoer/Uitvoer operaties (b.v. invoer mogelijk). Een bestandsindicator wordt gereed geacht als het mogelijk is de overeenkomende Invoer/Uitvoer operatie uit te voeren (b.v. \fBread\fP(2), of een voldoende kleine \fBwrite\fP(2)) zonder blokkering. .PP .\" \fBselect\fP() kan alleen bestandsindicator nummers monitoren die kleiner zijn dan \fBFD_SETSIZE\fP ; \fBpoll\fP(2) en \fBepoll\fP(7) hebben deze beperking niet. Zie BUGS. .SS "Bestandsindicator verzamelingen" Het hoofdargument van \fBselect\fP() zijn drie "verzamelingen" van bestandsindicators (gedeclareerd met het type \fIfd_set\fP), dat de aanroeper toestaat te wachten op drie klassen van gebeurtenissen op de gespecificeerde verzameling van bestandsindicators. Elk van de \fIfd_set\fP argumenten mag als NULL worden opgegeven als geen bestandsindicators moeten in de gaten worden gehouden voor de overeenkomende klasse van gebeurtenissen. .PP \fBLet op\fP: Bij terugkeer wordt elke bestandsindicator verzameling ter plekke gemodificeerd om aan te geven welke bestandsindicator op dat moment "gereed" is. Daarom, als \fBselect\fP() in een lus wordt gebruikt \fImoeten de verzamelingen geinitialiseerd worden\fP voorafgaand aan elke aanroep. De implementatie van de \fIfd_set\fP argumenten als waarde\-resultaat argumenten is een ontwerp fout die werd vermeden in \fBpoll\fP(2) \fBepoll\fP(7). .PP De inhoud van een bestandsindicator verzameling kan aangepast worden door de volgende macro´s te gebruiken: .TP \fBFD_ZERO\fP() Deze macro wist (verwijdert alle bestandsindicators van) \fIverzameling\fP. Hij moet worden gebruikt als een eerste stap bij het initialiseren van een bestandsindicator verzameling. .TP \fBFD_SET\fP() Deze macro voegt een bestandsindicator \fIbi\fP toe aan \fIverzameling\fP. Het toevoegen van een reeds bestaande indicator aan een verzameling doet niets, en produceert geen fout. .TP \fBFD_CLR\fP() Deze macro verwijderd een bestandsindicator \fIbi\fP van een \fIverzameling\fP. Het verwijderen van een niet\-aanwezige indicator in de verzameling doet niks, en produceert geen fout. .TP \fBFD_ISSET\fP() .\" \fBselect\fP() modificeert de inhoud van verzamelingen volgens de hieronder beschreven regels. Na het aanroepen van \fBselect\fP() kan de \fBFD_ISSET\fP() macro worden gebruikt om te testen of een bestandsindicator nog aanwezig is in de verzameling. \fBFD_ISSET\fP() retourneert niet\-nul als de bestandsindicator \fIbi\fP aanwezig is in \fIverzameling\fP, en nul als hij niet aanwezig is. .SS Argumenten De argumenten van \fBselect\fP() zij als volgt: .TP \fIleesbi\fP De bestandsindicators in deze verzameling worden bekeken om te zien of deze gereed zijn om te lezen. Een bestandsindicator is gereed om te lezen als een lees operatie niet zal blokkeren; in het bijzonder is een bestandsindicator ook gereed bij het bestand\-einde. .IP Nadat \fBselect\fP() is teruggekeerd zullen alle bestandsindicators in \fIleesbi\fP worden gewist behalve die, die gereed zijn om te lezen. .TP \fIschrijfbi\fP De bestandsindicators in deze verzameling worden bekeken om te zien of deze gereed zijn om te schrijven. Een bestandsindicator is gereed om te schrijven als een schrijf operatie niet zal blokkeren. Hoewel zelfs als een bestandsindicator aangeeft schrijfbaar te zijn, kan een grote schrijfactie toch blokkeren . .IP Nadat \fBselect\fP() is teruggekeerd zullen alle bestandsindicators in \fIschrijfbi\fP worden gewist behalve die, die gereed zijn om te schrijven. .TP \fIuitzondbi\fP De bestandsindicators in deze verzameling worden bekeken op "uitzonderlijke condities". Voor e .IP Nadat \fBselect\fP() is teruggekeerd zullen alle bestandsindicators in \fIuitzondbi\fP worden gewist behalve die, waarvoor een uitzonderlijke conditie is opgetreden. .TP \fInfds\fP Dit argument dient gezet te worden op de hoogst\-genummerde bestandsindicator in enige van de drie verzamelingen, plus 1. De aangegeven bestandsindicators in elke verzameling worden gecontroleerd, tot deze limiet (let op, zie BUGS). .TP \fItijdslimiet\fP Het \fItijdslimiet\fP argument is een \fItimeval\fP structure (hieronder) die het interval specificeert dat \fBselect\fP() moet blokkeren terwijl hij wacht op een bestandsindicator om "gereed" te worden. De aanroep zal blokkeren totdat ofwel: .RS .IP \(bu 2 een bestandsindicator wordt gereed; .IP \(bu een aanroep werd onderbroken door een signaal afhandelaar; of .IP \(bu de tijdslimiet verliep. .RE .IP Let op dat het \fItijdslimiet\fP interval wordt afgerond op de systeem klok korrel, en de vertraging door het schedulen van de kernel betekent dat het blokkeer interval kan worden overschreden met een kleine hoeveelheid. .IP Als beide velden van de \fItijdslimiet\fP structure nul zijn, dan keert \fBselect\fP() meteen terug. (Dit is bruikbaar om te pollen) .IP .\" Als \fItijdslimiet\fP werd opgegeven als NULL, dan wacht \fBselect\fP() oneindig lang totdat een bestandsindicator "gereed" wordt. .SS pselect() De \fBpselect\fP() systeem aanroep staat een applicatie toe om veilig te wachten totdat een bestandsindicator gereed wordt of een signaal wordt ontvangen. .PP De werking van \fBselect\fP() en \fBpselect\fP() is identiek, anders dan deze drie verschillen: .IP \(bu 2 \fBselect\fP() gebruikt een tijdslimiet welk een \fIstruct timeval\fP (met seconden en microseconden) is, terwijl \fBpselect\fP() een \fIstruct timespec\fP is (met seconden en nanosecondsen). .IP \(bu \fBselect\fP() kan het \fItijdslimiet\fP argument updaten om aan te geven hoeveel tijd er overbleef. \fBpselect\fP() verandert dit argument niet. .IP \(bu \fBselect\fP() heeft geen \fIsigmask\fP argument en gedraagt zich als een \fBpselect\fP() aanroep met \fIsigmask\fP gelijk aan NULL. .PP \fIsigmask\fP is een wijzer naar een signaal masker (zie \fBsigprocmask\fP(2)); als het niet NULL is, dan vervangt \fBpselect\fP() eerst het huidige sigmaal masker door het masker aangewezen door \fIsigmask\fP, voert vervolgens de "select" functie uit, en hersteld het het originele signaal masker. (Als \fIsigmask\fP is NULL, dan wordt het signaal masker niet gewijzigd door de \fBpselect\fP() aanroep. .PP Anders dan het verschil in de precisie van het \fItijdslimiet\fP argument, is de volgende \fBpselect\fP() aanroep: .PP .in +4n .EX ready = pselect(nfds, &readfds, &writefds, &exceptfds, timeout, &sigmask); .EE .in .PP equivalent aan het atomair uitvoeren van de volgende aanroepen: .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 De reden dat \fBpselect\fP() nodig is, is dat als men wil wachten op ofwel een signaal of het "gereed" worden van een bestandsindicator, dan voorkomt een atomaire test race\-condities. (Veronderstel dat de signaal afhandelaar een globale vlag zet en terug keert. Dan zou een test van deze globale vlag gevolgd door een aanroep van \fBselect\fP() oneindig lang hangen als het signaal precies na de test aankwam maar precies vóór de aanroep. In tegenstelling hiermee staat \fBpselect\fP() toe om eerst het signaal te blokkeren, het ontvangen signaal af te handelen, en dat \fBpselect\fP() aan te roepen, met het gewenste \fIsigmask\fP, daarmee de race te voorkomen. .SS "De tijdslimiet" Het \fItijdslimiet\fP argument van \fBselect\fP() is een structure van het volgende type: .PP .in +4n .EX struct timeval { time_t tv_sec; /* seconden */ suseconds_t tv_usec; /* microseconden */ }; .EE .in .PP Het overeenkomende argument voor \fBpselect\fP() heeft het volgende type: .PP .in +4n .EX struct timespec { time_t tv_sec; /* seconden */ long tv_nsec; /* nanoseconden */ }; .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. Op Linux, wijzigt \fBselect\fP() \fItijdslimiet\fP om de niet geslapen tijd weer te geven; de meeste andere implementaties doen dit niet. (POSIX.1 staat beide gedragingen toe.) Dit veroorzaakt problemen zowel wanneer Linux code die \fItijdslimiet\fP leest, wordt overgezet op andere besturingssystemen, als wanneer code wordt overgezet naar Linux, die \fIstruct timeval\fP hergebruikt voor meerdere \fBselect\fP() in een lus zonder deze te her\-initialiseren. Beschouw \fItijdslimiet\fP niet gedefinieerd nadat \fBselect\fP terugkeert .SH "EIND WAARDE" Bij succes geven \fBselect\fP() en \fBpselect\fP() het aantal bestandsindicators terug die bevat zijn in de drie geretourneerde indicator verzamelingen (dat is, het totaal aantal bits die gezet zijn in \fIleesbi\fP, \fIschrijfbi\fP, \fIuitzondbi\fP). De uitvoer waarde mag nul zijn als de tijdslimiet verliep voordat een van de indicators "gereed" werd. .PP Bij een fout wordt \-1 teruggegeven en \fIerrno\fP wordt overeenkomstig gezet; de bestandsindicators verzamelingen blijven ongewijzigd en \fItijdslimiet\fP wordt ongedefinieerd. .SH FOUTEN .TP \fBEBADF\fP Een ongeldige bestandsindicator werd opgegeven in een van de verzamelingen. (Misschien een bestandsindicator die al gesloten werd, of een waarop een fout is opgetreden.) Hoewel, zie BUGS. .TP \fBEINTR\fP Een signaal werd gevangen; zie \fBsignal\fP(7). .TP \fBEINVAL\fP \fInfds\fP is negatief of overschrijdt de \fBRLIMIT_NOFILE\fP hulpbron limiet (zie \fBgetrlimit\fP(2)). .TP \fBEINVAL\fP De waarde bevat in \fItijdslimiet\fP is ongeldig. .TP \fBENOMEM\fP Het was niet mogelijk om voldoende geheugen de bemachtigen voor interne tabellen. .SH VERSIES \fBpselect\fP() werd toegevoegd aan Linux in kernel 2.6.16. Voordien werd \fBpselect\fP() geëmuleerd in glibc (maar zie BUGS) .SH "VOLDOET AAN" \fBselect\fP() voldoet aan POSIX.1\-2001, POSIX.1\-2008, and 4.4BSD (\fBselect\fP() verscheen eerst in 4.2BSD). Algemeen overdraagbaar naar/van niet\-BSD systemen daarbij de klonen met de BSD socket laag ondersteunend (inclusief System\ V varianten). Let op dat de System\ V varianten typisch de tijdslimiet variabele zet voor terugkeer, maar dat de BSD variant dit niet doet. .PP \fBpselect\fP() is gedefineerd in POSIX.1g, en in POSIX.1\-2001 en POSIX.1\-2008. .SH OPMERKINGEN Als \fIfd_set\fP een vaste buffer grootte is. Uitvoeren van \fBFD_CLR\fP() of \fBFD_SET\fP() met een waarden van \fIbi\fP die negatief is of groter of gelijk is aan \fBFD_SETSIZE\fP zal resulteren in onbepaald gedrag. Bovendien vereist POSIX dat \fIbi\fP een geldige bestandsindicator is. .PP De werking van \fBselect\fP() en \fBpselect\fP() wordt niet beïnvloed door de \fBO_NONBLOCK\fP vlag. .PP .\" Darwin, according to a report by Jeremy Sequoia, relayed by Josh Triplett .\" Op sommige andere UNIX systemen, kan \fBselect\fP() falen met de fout \fBEAGAIN\fP als het systeem faalt om kernel\-interne hulpbronnen toe te kennen, in plaats van \fBENOMEM\fP zoals Linux doet. POSIX specificeert deze fout voor \fBpoll\fP(2), maar niet voor \fBselect\fP(). Overdraagbare programma´s controleren beter op \fBEAGAIN\fP en lussen dan, net als bij \fBEINTR\fP. .SS "De zelf\-pijp truc" .\" Op systemen waar \fBpselect\fP() ontbreekt, betrouwbare (en meer overdraagbare) signaal trapping kan worden bereikt met de zelf\-pijp truc. In deze truc schrijft een signaal afhandelaar een byte naar een pijp wiens andere einde wordt gemonitord door \fBselect\fP() in het hoofdprogramma. (Om blokkeren te voorkomen bij het schrijven naar een volle pijp, of lezen van een lege pijp, dient niet\-blokkerende Invoer/Uitvoer gebruikt te worden bij het lezen van en schrijven naar een pijp.) .SS "Emuleren usleep(3)" .\" Voor het verschijnen van \fBusleep\fP(3) gebruikte sommige code de aanroep van \fBselect\fP() met alle verzamelingen leeg, \fInfds\fP nul, en een niet\-NULL \fItijdslimiet\fP als een enigszins overdraagbare manier om met subseconde precisie te slapen. .SS "Overeenkomsten tussen select() en poll() meldingen" .\" fs/select.c In de Linux kernel broncode vinden we de volgende definities die de overeenkomsten tussen de leesbare, schrijfbare en uitzondering condities notificaties van \fBselect\fP() tonen en de gebeurtenis notificaties voorzien door \fBpoll\fP(2) en \fBepoll\fP(7): .PP .in +4n .EX #define POLLIN_SET (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN | EPOLLHUP | EPOLLERR) /* Gereed om te lezen */ #define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT | EPOLLERR) /* Gereed om te schrijven */ #define POLLEX_SET (EPOLLPRI) /* Uitzondering conditie */ .EE .in .\" .SS "Multithreaded applicaties" .\" Als een bestandsindicator die door \fBselect\fP() wordt gemonitord wordt gesloten in een andere thread, dan is het resultaat niet gespecificeerd. Op sommige UNIX systemen zal \fBselect\fP() uit blokkeren gaan en terug keren met een indicatie dat de bestandsindicator gereed is (een opvolgende Invoer/Uitvoer operatie zal mogelijk falen met een fout, behalve als een ander proces de bestandsindicator heropent tussen het tijdstip dat \fBselect\fP() terug gaf en de Invoer/Uitvoer operatie werd uitgevoerd). Op Linux (en sommige andere systemen) heeft het sluiten van de bestandsindicator in een andere thread geen effect op \fBselect\fP(). Samenvattend: een applicatie die vertrouwt op een specifiek gedrag in dit scenario moet als buggy beschouwd worden. .SS "C library/kernel verschillen" De Linux kernel staat bestandsindicator verzamelingen van willekeurige grootte toe, waarbij de lengte van de verzamelingen kan worden bepaald aan de hand van de waarde van \fInfds\fP. Hoewel in de glibc implementatie het type \fIfs_set\fP een vaste grootte heeft. Zie ook BUGS. .PP Het \fBpselect\fP() interface beschreven op deze pagina is geïmplementeerd in glibc. De onderliggende Linux systeem aanroep is \fBpselect6\fP() genaamd. Deze systeem aanroep verschilt iet of wat in gedrag van de glibc omwikkel functie. .PP De Linux \fBpselect6\fP() systeem aanroep verandert zijn \fItijdslimiet\fP argument. Hoewel de glibc omwikkel functie dit gedrag verbergt door het gebruik van een lokale variabele voor het timeout argument dat wordt door gegeven aan de systeem aanroep. Dus modificeert de glibc \fBpselect\fP() functie zijn argument \fItijdslimiet\fP niet; dit gedrag wordt ook vereist door POSIX.1\-2001. .PP Het laatste argument van de \fBpselect6\fP() systeem aanroep is geen \fIsigset_t\ *\fP wijzer, maar in plaats daarvan een structure van de vorm: .PP .in +4n .EX struct { const kernel_sigset_t *ss; /* Wijzer naar een signaal verzameling */ size_t ss_len; /* Grootte (in bytes) van het object aangewezen door \(aqss\(aq */ }; .EE .in .PP .\" Dit staat de systeem aanroep toe om zowel een wijzer naar de signaal verzameling als ook zijn grootte te hebben, terwijl gelijkertijd wordt toegestaan op de meeste architecturen een maximum van 6 argumenten te ondersteunen voor de systeem aanroep. Zie \fBsigprocmask\fP(2) voor een discussie over de verschillen tussen de kernel en de libc notatie van de signaal verzameling. .SS "Historische glibc details" Glibc 2.0 voorzag in een incorrecte versie van \fBpselect\fP() die niet om een \fIsigmask\fP argument vroeg. .PP In de glibc versies 2.1 tot 2.2.1 moest men \fB_GNU_SOURCE\fP definiëren om de declaratie van \fBpselect\fP() uit \fI\fP te verkrijgen. .SH BUGS POSIX staat een implementatie toe om een bovenlimiet te definiëren, die wordt geadverteerd door de constante \fBFD_SETSIZE\fP, voor de het bereik van bestandsindicatoren dat kan worden opgegeven in een bestandsindicator verzameling. De Linux kernel legt geen vaste limiet op, maar de glibc implementatie maakt van \fIfd_set\fP een type van vaste grootte, met \fBFD_SETSIZE\fP gedefinieerd als 1024, en de \fBFD_*\fP() macro´s werkend conform deze limiet. Om bestandsindicatoren te monitoren die groter dan deze limiet zijn, moet u \fBpoll\fP(2) of \fBepoll\fP(7) gebruiken. .PP Volgens POSIX zou \fBselect\fP() alle opgegeven bestandsindicatoren in de drie bestandsindicatoren verzamelingen moeten controleren, tot aan de limiet \fInfds\-1\fP. Hoewel de huidige implementatie elke bestandsindicator in deze verzamelingen negeert die groter is dan het maximum bestandsindicator getal dat het proces momenteel geopend heeft. Volgens POSIX zou elke bestandsindicator die werd opgegeven in een van de verzamelingen moeten resulteren in de \fBEBADF\fP fout. .PP Vanaf versie 2.1 voorzag glibc in een emulatie van \fBpselect\fP() die werd geïmplementeerd gebruikmakend van \fBsigprocmask\fP(2) en \fBselect\fP(). Deze implementatie was gevoelig voor dezelfde race conditie waarvoor nu precies \fBpselect\fP() ontworpen was om te voorkomen. Moderne versies van glibc gebruiken de (race\-vrije) \fBpselect\fP() systeem aanroep op kernels waarin deze is voorzien. .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? Op Linux kan \fBselect\fP() een socket bestandsindicator rapporteren als "gereed om te lezen", terwijl tegelijkertijd een opeenvolgende lees\-actie blokkeert. Dit kan bijvoorbeeld optreden wanneer data werd ontvangen maar bij het onderzoeken blijkt dat de controlesom verkeerd is en wordt verworpen. Er kunnen andere omstandigheden zijn waarin bestandsindicatoren ten onrechte worden gerapporteerd als gereed. Het kan daarom veiliger zijn om \fBO_NONBLOCK\fP te gebruiken op sockets die niet mogen blokkeren. .PP Op Linux wijzigt \fBselect\fP() ook \fItijdslimiet\fP als de aanroep werd onderbroken door een signaal afhandelaar (m.a.w. de \fBEINTR\fP foutmelding). Dit wordt niet toegestaan door POSIX.1. De Linux \fBpselect\fP() systeem aanroep heeft hetzelfde gedrag, maar de glibc omwikkel functie verstopt dit gedrag door de \fItijdslimiet\fP intern te kopiëren naar een lokale variabele en deze variabele door te geven naar de systeem aanroep. .SH VOORBEELDEN .EX #include #include #include int main(void) { fd_set lbesb; struct timeval tw; int terugwrd; /* Beloer stdin (bi 0) om te kijken wanneer het invoer heeft. */ FD_ZERO(&lbesb); FD_SET(0, &lbesb); /* Wacht maximaal vijf seconden. */ tw.tv_sec = 5; tw.tv_usec = 0; retval = select(1, &rfds, NULL, NULL, &tv); /* Vertrouw nu de waarde van tv niet! */ if (terugwrd == \-1) perror("select()"); else if (terugwrd) printf("Gegevens zijn nu beschikbaar.\en"); /* FD_ISSET(0, &lbesb) zal waar zijn. */ else printf("Geen gegevens binnen vijf seconden.\en"); exit(EXIT_SUCCESS); } .EE .SH "ZIE OOK" \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 Voor een inleiding met discussie en voorbeelden zie \fBselect_tut\fP(2). .SH COLOFON Deze pagina is onderdeel van release 5.10 van het Linux \fIman\-pages\fP\-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op \%https://www.kernel.org/doc/man\-pages/ te vinden. .PP .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . .PP Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID. .PP Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar .MT debian-l10n-dutch@lists.debian.org .ME .