Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fcntl(2)

poll(2)

read(2)

write(2)

types(5)

select(3C)                                                       select(3C)

NAME
     select, FDCLR, FDISSET, FDSET, FDZERO - Synchrones E/A-Multiplexen

SYNTAX
     #include <sys/time.h>
     #include <sys/types.h>

     int select(int nfds, fd_set *readfds, fd_set *writefds,
                fd_set *errorfds, struct timeval *timeout);

     void FD_CLR(int fd, fd_set *fdset);

     int FD_ISSET(int fd, fd_set *fdset);

     void FD_SET(int fd, fd_set *fdset);

     void FD_ZERO(fd_set *fdset);

BESCHREIBUNG
     Die Funktion select() gibt an, welche der angegebenen Dateideskripto-
     ren bereit für Lesen oder für Schreiben sind, oder für welche eine
     Fehlerbedingung ansteht. Wenn die angegebene Bedingung auf keinen der
     angegebenen Dateideskriptoren zutrifft, wird select() für die Dauer
     eines definierten Zeitintervalls blockiert, bis die Bedingung zumin-
     dest für einen der angegebenen Dateideskriptoren zutrifft.

     Die Funktion select() unterstützt reguläre Dateien, Gerätedateien für
     Terminals und Pseudo-Terminals (pty), STREAMS-Dateien, FIFOs und
     Pipes. Das Verhalten von select() bei Dateideskriptoren, die auf
     andere Dateitypen verweisen, ist nicht definiert.

     Das Argument nfds gibt den Bereich der zu überprüfenden Dateideskrip-
     toren an. Die Funktion select() überprüft Dateideskriptoren im Bereich
     von 0 bis nfds-1.

     Ist das Argument readfs kein Null-Zeiger, zeigt es auf ein Objekt des
     Typs fdset, das bei Eingabe die auf Lesebereitschaft zu überprüfenden
     Dateideskriptoren und bei Ausgabe die Dateideskriptoren angibt, die
     lesebereit sind.

     Ist das Argument writefs kein Null-Zeiger, zeigt es auf ein Objekt des
     Typs fdset, das bei Eingabe die auf Schreibbereitschaft zu überprü-
     fenden Dateideskriptoren und bei Ausgabe die Dateideskriptoren angibt,
     die schreibbereit sind.

     Ist das Argument errorfds kein Null-Zeiger, zeigt es auf ein Objekt
     des Typs fdset, das bei Eingabe die auf anstehende Fehlerbedingungen
     zu überprüfenden Dateideskriptoren und bei Ausgabe die Dateideskripto-
     ren angibt, für die Fehlerbedingungen anstehen.






Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

select(3C)                                                       select(3C)

     Bei erfolgreicher Ausführung werden die Objekte, auf die die Argumente
     readfs, writefs und errorfds zeigen, so geändert, daß angezeigt wird,
     welche Dateideskriptoren bereit für Lesen oder bereit für Schreiben
     sind, bzw. für welche eine Fehlerbedingung ansteht. Für jeden Dateide-
     skriptor kleiner als nfds wird das zugehörige Bit bei erfolgreicher
     Ausführung gesetzt, wenn es auch bei der Eingabe gesetzt wurde und die
     zugeordnete Bedingung für diesen Dateideskriptor zutrifft.

     Ist das Argument timeout kein Null-Zeiger, zeigt es auf ein Objekt des
     Typs struct timeval, das ein Zeitlimit für die Ausführung der Auswahl
     angibt. Wenn das Argument timeout auf ein Objekt des Typs struct
     timeval zeigt, dessen Komponenten 0 sind, wird select() nicht blok-
     kiert. Ist das Argument timeout ein Null-Zeiger, wird select() blok-
     kiert, bis ein Ereignis eintrifft, aufgrund dessen eine der Masken mit
     einem gültigen Wert (ungleich Null) zurückgegeben wird. Wenn das Zeit-
     limit vor Eintreffen eines Ereignisses, bei dem eine der Masken auf
     einen Wert ungleich Null gesetzt wird, abläuft, wird die Funktion
     select() erfolgreich beendet und gibt den Wert 0 zurück.

     Abhängig von der jeweiligen Implementierung kann das maximal unter-
     stützte Zeitlimit eingeschränkt sein. Bei allen Implementierungen
     beträgt das unterstützte Zeitlimit mindestens 31 Tage. Gibt das Argu-
     ment timeout ein Zeitlimit über dem implementierungsabhängigen Maxi-
     malwert an, wird der Maximalwert als Zeitlimit verwendet. Durch die
     jeweilige Implementierung kann auch die Granularität von Zeitinterval-
     len eingeschränkt sein. Ist für das angeforderte Zeitlimit eine höhere
     Granularität als die durch die Implementierung unterstützte erforder-
     lich, wird das tatsächliche Zeitlimit auf den jeweils nächsten, unter-
     stützten Wert gerundet.

     Sind die Argumente readfs, writefs und errorfds Null-Zeiger und ist
     das Argument timeout kein Null-Zeiger, wird select() bis zum Ablauf
     des angegebenen Zeitlimits bzw. bis zur Unterbrechung durch ein Signal
     blockiert. Sind die Argumente readfs, writefs und errorfds Null-Zeiger
     und ist das Argument timeout ebenfalls ein Null-Zeiger, wird select()
     bis zur Unterbrechung durch ein Siganl blockiert.

     Dateideskriptoren, die regulären Dateien zugeordnet sind, nehmen für
     Lesebereitschaft, Schreibbereitschaft und anstehenden Fehlerbedingun-
     gen immer den Wert wahr (true) an.

     Bei einem Fehler werden die Objekte, auf die die Argumente readfs,
     writefs und errorfds zeigen, nicht geändert. Wenn das Zeitlimit
     abläuft, ohne daß die entsprechende Bedingung für eine der angegebenen
     Dateideskriptoren vorliegt, werden alle Bits der Objekte, auf die die
     Argumente readfs, writefs und errorfds zeigen, auf 0 gesetzt.








Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

select(3C)                                                       select(3C)

     Dateideskriptormasken des Typs fdset können initialisiert werden. Es
     ist nicht definiert, ob es sich hier jeweils um ein Makro oder eine
     Funktion handelt. Wird eine Makrodefinition unterdrückt, um den
     Zugriff auf eine echte Funktion zu erhalten, oder definiert ein Pro-
     gramm eine externe Kennung mit einem dieser Namen, ist das Verhalten
     nicht definiert.

     FDCLR(fd, &fdset)
          Löscht das Bit für den Dateideskriptor fd in der Dateideskriptor-
          gruppe fdset.

     FDISSET(fd, &fdset)
          Gibt einen Wert ungleich Null zurück, wenn das Bit für den Datei-
          deskriptor fd in der Dateideskriptorgruppe gesetzt ist, auf die
          fdset zeigt. Andernfalls wird 0 zurückgegeben.

     FDSET(fd, &fdset)
          Setzt das Bit für den Dateideskriptor fd in der Dateideskriptor-
          gruppe fdset.

     FDZERO(&fdset)
          Initialisiert die Dateideskriptorgruppe fdset, so daß für alle
          Dateideskriptoren Null-Bits gelten.

     Das Verhalten dieser Makros ist nicht definiert, wenn das Argument fd
     kleiner als 0 oder größer oder gleich FDSETSIZE ist.

RÜCKGABEWERT
     fd wird in der Dateideskriptorgruppe gesetzt, auf die fdset zeigt,
     andernfalls wird 0 angegeben.

     Bei erfolgreicher Ausführung gibt select() die Gesamtanzahl der Bits
     zurück, die in den Bit-Masken gesetzt sind. Andernfalls wird -1
     zurückgegeben und errno wird gesetzt, um den Fehler anzuzeigen.

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Bei folgenden Bedingungen schlägt select() fehl und setzt errno auf
     den angegebenen Wert:

     EBADF     In einer oder mehreren Dateideskriptorgruppen ist ein ungül-
               tiger Dateideskriptor angegeben.

     EINTR     Die Funktion select() wurde vor Eintreffen eines der ausge-
               wählten Ereignisse und vor Ablauf des Zeitlimits unterbro-
               chen.





Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

select(3C)                                                       select(3C)

     Wurde SARESTART für das Unterbrechungssignal gesetzt, hängt es von
     der jeweiligen Implementierung ab, ob select() neu gestartet oder
     EINTR zurückgegeben wird.

     EINVAL    Ein ungültiges Zeitlimit wurde angegeben.

     EINVAL    Das Argument nfds ist kleiner als 0 oder größer oder gleich
               FDSETSIZE.

     EINVAL    Einer der angegebenen Dateideskriptoren verweist auf einen
               STREAM oder Multiplexer mit einem (direkten oder indirekten)
               Link unterhalb eines Multiplexers.

ANWENDUNGSZWECK
     Die Verwendung eines Zeitlimits hat keine Auswirkungen auf eventuelle
     Zeitgeber, die durch alarm(), ualarm() oder settimer() eingerichtet
     wurden.

     Bei erfolgreicher Ausführung wird das Objekt, auf das das Argument
     timeout zeigt, möglicherweise geändert.

SIEHE AUCH
     fcntl(2), poll(2), read(2), write(2), systime(5), types(5).































Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026