Manpages

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 [AT] nl.org>.

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