select

SELECT(2)               Linux Programmeurs Handleiding               SELECT(2)



NAAM
       select, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - gelijktijdige In/Uit
       verdeling

BESCHRIJVING
       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>

       int select(int n, fd_set *leesbi, fd_set *schrijfbi, fd_set *uitzondbi,
       struct timeval *tijduit);

       FD_CLR(int bi, fd_set *set);
       FD_ISSET(int bi, fd_set *set);
       FD_SET(int bi, fd_set *set);
       FD_ZERO(fd_set *set);

BESCHRIJVING
       select wacht tot een aantal bestandindicators van toestand veranderd.

       Drie onafhankelijke zetten van beschrijvers worden beloerd. Zij die
       opgenoemd worden in 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 schrijfbi
       zullen worden beloerd om te zien of een schrijf-opdracht niet zal
       blokkeren, en die in 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.

       Er is voorzien in vier macro's om de sets te manipuleren.  FD_ZERO
       {*nul} zal een set wissen.  FD_SET {*zet} en FD_CLR {*wis} voegt toe of
       verwijderd een gegeven beschrijver van een set.  FD_ISSET {*is set}
       test om te zien of een beschrijver onderdeel is van de set; dit is
       bruikbaar nadat select terugkeert.

       n is de hoogst-genummerde beschrijver in de drie sets, plus 1.

       tijduit is een boven-grens op de hoeveelheid tijd verstreken voordat
       select terugkeert. Het mag nul zijn, wat veroorzaakt dat select on-
       Middelijk terugkeert. Als tijduit NULL is (geen tijduit) dan kan select
       voor onbepaalde duur blokkeren.

TERUGGEEF WAARDE
       Bij success geeft 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 errno wordt
       naar behoren gezet; de sets en tijduit worden onbepaald, dus vertrouw
       niet op hun inhoud na een fout.

FOUTEN
       EBADF  {slechte bi} Een ongeldige bestandindicator werd gegeven in een
              van de sets.

       EINTR  {ongeldig} Een niet geblokkeerd signaal werd gevangen.

       EINVAL {ongeldig} n is negatief

       ENOMEM {geen geheugen} select was niet in status om voldoende geheugen
              de bemachtigen voor interne tabellen.

OPMERKINGEN
       Sommige code roept select aan met alle drie sets leeg, n nul, en een
       niet-nul tijduit als een vrij overdraagbare manier om te slapen met
       kleiner dan een seconde precisie.

       Op Linux wordt 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 tijduit leest en overgedragen
       wordt naar andere besturingssystemen, en wanneer code wordt
       overgedragen naar Linux die de "struct" timeval voor meerdere selects
       in een lus gebruikt zonder het opnieuw in te wijden. Beschouw tijduit
       als onbepaald nadat select terugkeert

VOORBEELD
       #include <stdio.h>
       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>

       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);
       }

VOLDOET AAN
       4.4BSD (de 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.

ZIE
       accept(2) {aanvaarden}, connect(2) {aansluiten}, poll(2) {onderzoek},
       read(2) {lees}, recv(2) {ontvang}, send(2) {zend}, write(2) {schrijf}


VERTALING
       Dit is een handleiding uit manpages-dev 1.29.  Alles wat tussen
       `{'..`}' staat is aanvullende vertaling, en hoort niet bij de originele
       handleiding.  Email naar <manpages-nl@nl.linux.org>.

       $Id: select.2,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $



Linux 1.2                      Februari 11, 1996                     SELECT(2)