poll(2) poll(2)
NAME
poll - STREAMS-Ein-/Ausgabe multiplexen
SYNTAX
#include <stropts.h>
#include <poll.h>
int poll(struct pollfd *fds, nfdst nfds, int timeout);
BESCHREIBUNG
poll() bietet dem Benutzer einen Mechanismus für das Multiplexen der
Ein-/Ausgabe über einen Satz von Dateideskriptoren, die auf offene
Dateien verweisen. poll() kennzeichnet die Dateien, auf denen der
Benutzer Meldungen empfangen oder senden kann, oder auf denen
bestimmte Ereignisse eingetreten sind.
fds gibt die zu prüfenden Dateideskriptoren und die Ereignisse an, die
für jeden Dateideskriptor von Interesse sind. Es handelt sich um einen
Zeiger auf ein Feld mit jeweils einem Element für jeden offenen Datei-
deskriptor von Interesse. Die Elemente des Feldes sind pollfd-Struktu-
ren, die folgendes enthalten:
int fd; /* Dateideskriptor */
short events; /* angeforderte Ereignisse */
short revents; /* gemeldete Ereignisse */
fd gibt einen offenen Dateideskriptor an, und events (Ereignisse) und
revents (zurückgegebene Ereignisse) sind Bitmasken, die durch ODER-
Verknüpfung beliebiger Kombinationen nachstehender Ereignisanzeiger
aufgebaut werden:
POLLIN Daten, die nicht von hoher Priorität sind, können nicht-
blockierend gelesen werden. Für STREAMS wird diese
Option auch gesetzt, wenn die Meldung die Länge 0 hat.
POLLRDNORM Gewöhnliche Daten (Prioritätsbereich 0) können nicht-
blockierend gelesen werden. Für STREAMS wird diese
Option auch gesetzt, wenn die Meldung die Länge 0 hat.
POLLRDBAND Daten mit einer Prioritätsbereich ungleich 0 können
nichtblockierend gelesen werden. Für STREAMS wird diese
Option auch gesetzt, wenn die Meldung die Länge 0 hat.
POLLPRI Daten mit hoher Priorität können nichtblockierend emp-
fangen werden. Für STREAMS wird diese Option auch
gesetzt, wenn die Meldung die Länge 0 hat.
POLLOUT Normale Daten können nichtblockierend geschrieben wer-
den.
POLLWRNORM Wie POLLOUT.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
poll(2) poll(2)
POLLWRBAND Daten mit einer Prioritätsbereich ungleich 0 können
geschrieben werden. Dieses Ereignis untersucht nur
Bereiche, die mindestens einmal geschrieben wurden.
POLLMSG Eine MSIG- oder MPCSIG-Meldung, die ein ASIGPOLL-Sig-
nal enthält, hat den Anfang der Stream-Kopf-Warte-
schlange erreicht.
POLLERR Eine Fehlermeldung liegt am Stream oder Gerät an. Dieser
Schalter ist nur in der revents-Bitmaske gültig; er wird
nicht im events-Feld verwendet.
POLLHUP Ein Hangup ist im Stream aufgetreten. Dieses Ereignis
und POLLOUT schließen sich gegenseitig aus; auf einen
Stream kann niemals geschrieben werden, wenn ein Hangup
aufgetreten ist. Jedoch schließen sich dieses Ereignis
und POLLIN, POLLRDNORM, POLLRDBAND oder POLLPRI nicht
gegenseitig aus. Dieser Schalter ist nur in der
revents-Bitmaske gültig; er wird nicht in einem events-
Feld verwendet.
POLLNVAL Der angegebene fd-Wert gehört nicht zu einer offenen
Datei. Dieser Schalter ist nur im revents-Feld gültig;
er wird nicht im events-Feld verwendet.
Liegt der Wert von fd unter 0, wird events ignoriert, und revents wird
bei der Rückkehr von poll() in diesem Eintrag auf 0 gesetzt.
In jeder pollfd-Struktur löscht poll() den Inhalt der Komponente
revents, außer die Anwendung hat einen Bericht zu einer Bedingung
durch Setzen eines der oben aufgeführten events-Bits angefordert. In
diesem Fall setzt poll() das entsprechende Bit in revents, wenn die
Bedingung zutrifft. Ferner setzt poll() das Flag POLLHUP, POLLERR oder
POLLNVAL in revents auch dann, wenn die jeweilige Bedingung zutrifft,
die Anwendung das entsprechende Bit in events jedoch nicht gesetzt
hat.
Wenn keines der definierten Ereignisse in einem der ausgewählten
Dateideskriptoren aufgetreten ist, wartet poll() zumindest timeout
Millisekunden auf das Auftreten eines Ereignisses bei einem der ausge-
wählten Dateideskriptoren. Wenn der Wert von timeout 0 ist, kehrt
poll() direkt zurück. Ist der Wert von timeout -1, bewirkt poll() eine
Blockierung, bis ein abgefragtes Ereignis auftritt oder der Abruf
unterbrochen wird.
Abhängig von der jeweiligen Implementierung kann die Einteilung (Gra-
nularität) von Zeitüberschreitungsintervallen Einschränkungen unter-
liegen. Wenn für das angeforderte Zeitüberschreitungsintervall klein-
ere Einteilungsschritte als von der Implementierung unterstützt erfor-
derlich sind, wird das tatsächliche Zeitüberschreitungsintervall auf
den nächsten unterstützten Wert gerundet.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
poll(2) poll(2)
Das Flag ONONBLOCK hat keine Auswirkungen auf die Funktion poll().
Die Funktion poll() unterstützt normale Dateien, Terminal- und
Pseudo-Terminal-Gerätedateien, STREAMS-spezifische Dateien, FIFO-
Dateien und Pipes. Das Verhalten von poll() bei Komponenten von fds,
die sich auf andere Dateitypen beziehen, ist unbestimmt.
Normale Dateien melden für Lesen oder Schreiben stets TRUE.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
poll() ist erfolglos, wenn einer oder mehrere der nachstehenden Punkte
zutreffen:
EAGAIN Zuweisung der internen Datenstrukturen war erfolglos, die
Anforderung kann jedoch wiederholt werden.
EFAULT Ein Argument zeigt auf einen Speicherplatz außerhalb des
zugewiesenen Adreßraums.
EINTR Ein Signal wurde während des Systemaufrufs poll() abgefan-
gen.
EINVAL Das Argument nfds ist größer als OPENMAX, oder eine der
fd-Komponenten verweist auf einen STREAM oder Multiplexer,
der (direkt oder indirekt) downstream vom Multiplexer ver-
bunden ist.
ERGEBNIS
Nach erfolgreicher Beendigung wird ein nicht negativer Wert zurückge-
geben. Ein positiver Wert zeigt die Gesamtanzahl der jeweils ausge-
wählten Dateideskriptoren an (d. h. Dateideskriptoren, für die das
Feld revents ungleich Null ist). 0 zeigt an, daß die Zeit für den Auf-
ruf abgelaufen ist und keine Dateideskriptoren gewählt wurden. Ist der
Vorgang erfolglos, wird -1 zurückgegeben und errno zur Anzeige des
Fehlers gesetzt.
SIEHE AUCH
getmsg(2), getrlimit(2), putmsg(2), read(2), write(2), pollbunch(3C),
poll(5), stropts(5).
"Leitfaden für Programmierer: STREAMS".
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98