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 $