.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" This manpage is copyright (C) 1992 Drew Eckhardt, .\" copyright (C) 1995 Michael Shields. .\" .\" 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. .\" .\" 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 .TH SELECT 2 "Februari 11, 1996" "Linux 1.2" "Linux Programmeurs Handleiding" .SH NAAM select, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- gelijktijdige In/Uit verdeling .SH BESCHRIJVING .B #include .br .B #include .br .B #include .sp \fBint select(int \fIn\fB, fd_set *\fIleesbi\fB, fd_set *\fIschrijfbi\fB, fd_set *\fIuitzondbi\fB, struct timeval *\fItijduit\fB); .sp .BI "FD_CLR(int " bi ", fd_set *" set ); .br .BI "FD_ISSET(int " bi ", fd_set *" set ); .br .BI "FD_SET(int " bi ", fd_set *" set ); .br .BI "FD_ZERO(fd_set *" set ); .fi .SH BESCHRIJVING .B select wacht tot een aantal bestandindicators van toestand veranderd. .PP Drie onafhankelijke zetten van beschrijvers worden beloerd. Zij die opgenoemd worden in .I leesbi zullen worden beloerd om te zien of er karakters beschikbaar komen voor lezen (nauwkeuriger, om te zien of een lees-opdracht niet zal blokkeren - in het bijzonder zal een bestandindicator ook klaar zijn bij eind-van-bestand), die in .I schrijfbi zullen worden beloerd om te zien of een schrijf-opdracht niet zal blokkeren, en die in .I uitzondbi zullen worden beloerd voor uitzonderingen. Bij het einde worden de sets locaal aangepast om aan te geven welke beschrijvers feitelijk van toestand veranderd zijn. .PP Er is voorzien in vier macro's om de sets te manipuleren. .B FD_ZERO {*nul} zal een set wissen. .B FD_SET {*zet} en .B FD_CLR {*wis} voegt toe of verwijderd een gegeven beschrijver van een set. .B FD_ISSET {*is set} test om te zien of een beschrijver onderdeel is van de set; dit is bruikbaar nadat .B select terugkeert. .PP .I n is de hoogst-genummerde beschrijver in de drie sets, plus 1. .PP .I tijduit is een boven-grens op de hoeveelheid tijd verstreken voordat .B select terugkeert. Het mag nul zijn, wat veroorzaakt dat .B select on-Middelijk terugkeert. Als .I tijduit NULL is (geen tijduit) dan kan .B select voor onbepaalde duur blokkeren. .SH TERUGGEEF WAARDE Bij success geeft .B select het aantal beschrijvers terug die de sets bevatten, wat nul kan zijn als de tijduit voorbijgaat voordat iets interessants gebeurd. Bij falen wordt \-1 teruggegeven en .I errno wordt naar behoren gezet; de sets en .I tijduit worden onbepaald, dus vertrouw niet op hun inhoud na een fout. .SH FOUTEN .TP .B EBADF {slechte bi} Een ongeldige bestandindicator werd gegeven in een van de sets. .TP .B EINTR {ongeldig} Een niet geblokkeerd signaal werd gevangen. .TP .B EINVAL {ongeldig} .I n is negatief .TP .B ENOMEM {geen geheugen} .B select was niet in status om voldoende geheugen de bemachtigen voor interne tabellen. .SH OPMERKINGEN Sommige code roept .B select aan met alle drie sets leeg, .B n nul, en een niet-nul .I tijduit als een vrij overdraagbare manier om te slapen met kleiner dan een seconde precisie. .PP Op Linux wordt .I tijduit veranderd om de hoeveelheid tijd niet-geslapen weer te geven; de meeste andere verwezijnlijkingen doen dit niet. Dit veroorzaakt problemen met Linux code die .I tijduit leest en overgedragen wordt naar andere besturingssystemen, en wanneer code wordt overgedragen naar Linux die de "struct" timeval voor meerdere .BR select s in een lus gebruikt zonder het opnieuw in te wijden. Beschouw .I tijduit als onbepaald nadat .B select terugkeert .SH VOORBEELD .nf #include #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; terugwrd = select(1, &lbesb, NULL, NULL, &tw); /* Vertrouw nu niet op de waarde van tw! */ if (terugwrd) printf("Gegevens zijn nu beschikbaar.\\n"); /* FD_ISSET(0, &lbesb) zal waar zijn. */ else printf("Geen gegevens binnen vijf seconden.\\n"); exit(0); } .fi .SH VOLDOET AAN 4.4BSD (de .B select functie verscheen voor het eerst in 4.2BSD). Over het algemeen overdraagbaar naar/van niet-BSD systemen die klonen van de BSD socket {"socket"} laag ondersteunen (inclusief System V soorten). Merk echter op dat de System V soort gewoonlijk de tijduit waarde zet voor eindigen, en de BSD soort doet dat niet. .SH ZIE .BR accept "(2) {aanvaarden}," .BR connect "(2) {aansluiten}," .BR poll "(2) {onderzoek}," .BR read "(2) {lees}," .BR recv "(2) {ontvang}," .BR send "(2) {zend}," .BR write "(2) {schrijf}" .\" Translated Mon Nov 13 15:17:52 CET 2000 by Jos Boersema .\" .SH VERTALING Dit is een handleiding uit \fBmanpages-dev 1.29\fR. Alles wat tussen `\fB{\fR'..`\fB}\fR' staat is \fBaanvullende vertaling\fR, en hoort \fBniet\fR bij de originele handleiding. Email naar . .\"Vertaling Jos Boersema $Id: select.2,v 1.1 2003/04/28 18:43:35 bokkie Exp $