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() - Ein-/Ausgabe multiplexen

&pagelevel(4)&pagelevel

#include <poll.h>

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

Beschreibung

Die Funktion poll() bietet dem Benutzer einen Mechanismus für das Multiplexen der Ein- und Ausgabe über eine Menge von Dateideskriptoren, die auf geöffnete Dateien verweisen.

Weitere allgemeine Informationen zu dieser Funktion finden Sie im Handbuch "C-Bibliotheksfunktionen für POSIX-Anwendungen".

poll() kennzeichnet die Deskriptoren,

  • auf denen das Programm Nachrichten empfangen kann oder

  • auf denen das Programm Nachrichten senden kann oder

  • auf denen bestimmte Ereignisse aufgetreten sind.

Der Parameter fds gibt die zu prüfenden Deskriptoren an sowie die Ereignisse, die für jeden Deskriptor von Interesse sind. fds zeigt auf ein Array mit jeweils einem Element pro offenem Dateideskriptor.

Die Struktur pollfd ist wie folgt deklariert:

struct pollfd {
    int fd;              /* Dateideskriptor */ 
    short events;        /* angeforderte Ereignisse */
    short revents;       /* gemeldete Ereignisse */
};

Das Element fd bezeichnet einen Socket-Dateideskriptor. Die Elemente events (für den Socket abzufragende Ereignisse) und revents (für den Socket zurückgemeldete Ereignisse) sind Bitmasken, die durch ODER-Verknüpfungen beliebiger Kombinationen der nachfolgend beschriebenen Ereignisanzeiger aufgebaut werden.

POLLIN

Daten können nicht-blockierend gelesen werden oder eine Verbindungsanforderung kann nicht-blockierend mit accept() angenommen werden.

POLLOUT

Daten können nicht-blockierend geschrieben werden.

POLLRDNORM

Wie POLLIN.

POLLWRNORM

Wie POLLOUT.

POLLERR

Für den Socket wurde ein Fehler gemeldet.

Diese Option ist nur in der revents-Bitmaske gültig, sie wird nicht in der events-Bitmaske verwendet.

POLLHUP

Ein Hangup-Erignis (Verbindungsabbruch) ist aufgetreten. POLLHUP und POLLOUT schließen sich gegenseitig aus. Auf einen Socket kann niemals geschrieben werden, wenn ein Hangup aufgetreten ist. Jedoch schließen sich POLLHUP und POLLIN nicht gegenseitig aus.

Diese Option ist nur in der revents-Bitmaske gültig, sie wird nicht in der events-Bitmaske verwendet.

POLLNVAL

Der angegebene fd-Wert gehört nicht zu einer offenen Datei.

Diese Option ist nur in der revents-Bitmaske gültig, sie wird nicht in der events-Bitmaske verwendet.

Bei jedem Element des Vektors, auf das fds zeigt, prüft poll() den angegebenen Dateideskriptor fd auf das oder die in events angegebenen Ereignisse. Die Anzahl der zu prüfenden Dateideskriptoren wird von nfds angegeben.

Wenn der Dateideskriptor fd kleiner als 0 ist, dann wird events ignoriert und die revents-Bitmaske bei der Rückkehr von poll() in diesem Eintrag auf null gesetzt.

Die Ergebnisse der poll()-Anfrage werden in revents gespeichert. Zur Anzeige, welche der angeforderten Ereignisse wahr sind, werden Bits in der revents-Bitmaske gesetzt. Wenn keine Ereignisse wahr sind, wird keines der angegebenen Bits bei der Rückkehr des poll()-Aufrufes in revents gesetzt. Die Bits POLLHUP, POLLERR und POLLNVAL werden stets in revents gesetzt, wenn die von ihnen angezeigten Bedingungen wahr sind. Dies ist auch der Fall, wenn diese Bits nicht in der events-Bitmaske gesetzt waren.

Wenn keines der Ereignisse bei einem der angegebenen Dateideskriptoren auftritt, wartet poll() wenigstens timeout Millisekunden auf das Auftreten mindestens eines Ereignisses bei einem der angegebenen Dateideskriptoren.

Wenn der Wert von timeout 0 ist, kehrt poll() sofort zurück. Wenn der Wert von timeout INFTIM (oder -1) ist, blockiert poll() bis ein Ereignis auftritt oder bis der Aufruf unterbrochen wird.

poll() ist von den Schaltern O_NDELAY und O_NONBLOCK nicht betroffen.

Returnwert

0:

Zeigt an, dass die Zeit für den Aufruf abgelaufen ist und keine Dateideskriptoren gewählt wurden.

>0:

Eine positive Zahl gibt die Gesamtzahl der aktuell ausgewählten Dateideskriptoren an, d. h. Dateideskriptoren, für die die revents-Bitmaske nicht null ist.

-1:

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

Fehler

EAGAIN

Die Zuweisung der internen Datenstrukturen war erfolglos, die Anforderung sollte jedoch erneut versucht werden.

EFAULT

Ein Parameter verweist auf eine Adresse außerhalb des zugewiesenen Adressraums.

EINTR

Ein Signal wurde während des poll()-Aufrufs abgefangen.

EINVAL

Der Parameter nfds ist kleiner als null oder größer als OPEN_MAX.

Siehe auch

accept(), listen(), read(), select(), write()