Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

poll - STREAMs-Ein-/Ausgabe multiplexen

&pagelevel(4)&pagelevel

Definition

#include <poll.h>

int poll(struct pollfd fds[], nfds_t nfds, int timeout);

Beschreibung

poll() stellt Anwendungen einen Mechanismus für das Multiplexen von Ein-/Ausgaben über einen Satz von offenen Dateideskriptoren zur Verfügung. Für jedes Feldelement, auf das fds zeigt, überprüft poll(), ob für den entsprechenden Dateideskriptor eines oder mehrere der in events aufgelisteten Ereignisse eingetreten ist. Die Anzahl pollfd-Strukturen im Feld fds wird durch den Wert nfds angegeben. poll() identifiziert die Dateideskriptoren, auf denen die Anwendung lesen oder schreiben kann oder für die Ereignisse eingetroffen sind.

fds legt die zu prüfenden Dateideskriptoren fest sowie die Ereignisse, die für den jeweiligen Dateideskriptor abgefragt werden sollen. fds ist ein Zeiger auf ein Feld mit jeweils einem Element für jeden zu prüfenden Dateideskriptor. Die Elemente des Feldes sind pollfd-Strukturen, die Folgendes enthalten:

int fd;            /* offener Dateideskriptor */
short events;      /* abzufragende Ereignisse */
short revents;     /* eingetretene Ereignisse */

fd bezeichnet einen offenen Dateideskriptor, events und revents sind Bitmasken, die durch ODER-Verknüpfung aus den folgenden Flags aufgebaut werden (es sind beliebige Kombinationen zulässig):

POLLIN

Daten, die nicht die höchste Priorität haben, können nichtblockierend gelesen werden. Für STREAMS wird dieses Flag in revents auch dann gesetzt, wenn die Nachricht die Länge 0 hat.

POLLRDNORM

Normale Daten (Priorität = 0) können nichtblockierend gelesen werden. Für STREAMS wird dieses Flag in revents auch dann gesetzt, wenn die Nachricht die Länge 0 hat.

POLLRDBAND

Daten mit Priorität != 0 können nichtblockierend gelesen werden. Für STREAMS wird dieses Flag in revents auch dann gesetzt, wenn die Nachricht die Länge 0 hat.

POLLPRI

Daten mit höchster Priorität können nichtblockierend empfangen werden.
Für STREAMS wird dieses Flag in revents auch dann gesetzt, wenn die Nachricht die Länge 0 hat.

POLLOUT

Normale Daten (Priorität = 0) können nichtblockierend geschrieben werden.

POLLWRNORM

wie POLLOUT.

POLLWRBAND

Daten mit Priorität != 0 können geschrieben werden.

POLLMSG

Eine M_SIG- oder M_PCSIG-Nachricht, die ein ASIGPOLL-Signal enthält, hat den Anfang der Stream-Kopf-Warteschlange erreicht.

POLLERR

Es ist ein Fehler aufgetreten für den STREAM oder die Gerätedatei. Dieses Flag ist nur in der revents-Bitmaske gültig; in der Bitmaske events wird es ignoriert.

POLLHUP

Im STREAM ist ein Hangup aufgetreten (die Verbindung zum Gerät ist unterbrochen). POLLHUP 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 bzw. POLLRD- NORM, POLLRDBAND oder POLLPRI nicht gegenseitig aus. Das Flag POLLHUP ist nur in der revents-Bitmaske gültig; in der Bitmaske events wird es ignoriert.

POLLNVAL

Der angegebene fd-Wert ist ungültig. Dieses Flag ist nur in der revents-Bit- maske gültig; in der Bitmaske events wird es ignoriert.

Wenn der Wert in fd kleiner als null ist, wird events ignoriert, und revents wird bei der Rückkehr von poll() für diesen Feldeintrag auf 0 gesetzt.

Die Ergebnisse der poll()-Anfrage werden im revents-Feld in der pollfd-Struktur angezeigt. poll() setzt zunächst alle Bits in revents auf null. Falls eines oder mehrere der in events abgefragten Ereignisse eingetroffen ist, setzt poll() die entsprechenden Bits in revents . Die Bits für POLLHUP, POLLERR und POLLNVAL werden beim Eintreffen der entsprechenden Ereignisse automatisch in revents gesetzt; sie müssen in events nicht gesetzt sein.

Wenn die Überprüfung ergibt, dass keines der für die Dateideskriptoren abgefragten Ereignisse eingetreten ist, wartet poll() wenigstens timeout Millisekunden auf das Auftreten eines Ereignisses für einen der angegebenen Dateideskriptoren. Bei einem Rechner, bei dem die Genauigkeit auf Millisekunden nicht zur Verfügung steht, wird timeout auf den nächsten zulässigen Wert aufgerundet, der in diesem System zur Verfügung steht. Wenn der Wert von timeout 0 ist, kehrt poll() sofort zurück. Hat timeout den Wert -1, wartet poll(), bis eines der abgefragten Ereignisse auftritt, oder bis der Aufruf unterbrochen wird (blockierender Aufruf von poll()).

poll() wird von den Flags O_NDELAY und O_NONBLOCK nicht beeinflusst.

poll() unterstützt Textdateien, Terminals, Pseudo-Terminals, STREAMS-basierte Dateien, FIFO-Dateien und Pipes, Sockets und XTI.

Bei Textdateien liefert poll() immer ein TRUE für das Lesen und Schreiben.

Returnwert

>= 0

bei Erfolg.
Ein positiver Wert zeigt die Gesamtanzahl der Dateideskriptoren an, für die das Feld revents ungleich null ist.
0 bedeutet, dass die Zeit für den Aufruf abgelaufen ist und keine Dateideskriptoren vorhanden sind, für die das Feld revents ungleich null ist.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

poll() schlägt fehl, wenn gilt:

 

EAGAIN

Die Zuweisung der internen Datenstrukturen ist fehlgeschlagen, könnte aber bei einer Wiederholung gelingen.

 

EFAULT

Ein Argument zeigt auf einen Speicherplatz außerhalb des zugewiesenen Adressraums.

 

EINTR

Während des Systemaufrufs poll() wurde ein Signal abgefangen.

 

EINVAL

Das Argument nfds ist kleiner als null oder größer als OPEN_MAX
oder einer der fd-Einträge bezieht sich auf einen STREAM
oder Multiplexer, der streamabwärts über einen Multiplexer angeschlossen ist.

Siehe auch

getmsg(), putmsg(), read(), select(), write(), poll.h, stropts.h.