Provided by: manpages-nl_20051127-4_all
 

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 uitzonderin‐
        gen. 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-Mid‐
        delijk  terugkeert.  Als  tijduit NULL is (geen tijduit) dan kan select
        voor onbepaalde duur blokkeren.
        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 overgedra‐
        gen 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);
        }
        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 $