Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

epoll_ctl - epoll-Objekt verwalten

&pagelevel(4)&pagelevel

Definition

#include <sys/epoll.h>
int epoll_ctl (int epfd, int op, int fd, struct epoll_event *event)

Beschreibung

Mit dieser Funktion wird das epoll-Objekt epfd verwaltet. Für die mit dem Dateideskriptor fd verbundene Datei wird die Operation op durchgeführt.

Beschreibung der Parameter:

int op

Gültige Werte für op sind:

EPOLL_CTL_ADD

Die Datei fd wird bei dem epoll-Objekt epfd mit den Ereignissen event registriert.

EPOLL_CTL_MOD

Ändert die Ereignisse event für die registrierte Datei fd.

EPOLL_CTL_DEL

Die Datei fd wird vom epoll-Objekt epfd entfernt. Der Parameter event wird ignoriert und kann den Wert NULL haben.

struct epoll_event *event

Der Parameter event beschreibt die für den Dateideskriptor fd zu überwachenden Ereignisse sowie anwendungsspezifische Daten, die bei Auftreten eines der Ereignisse zurück zu liefern sind.

Die Struktur struct e poll_event ist wie folgt definiert:

typedef union epoll_data {
   void *ptr;
   int fd;
   uint32_t u32;
   uint64_t u64;
} epoll_data_t;
struct epoll_event {
   uint32_t events; /* Epoll events */
   epoll_data_t data; /* User data variable */
};

Das Strukturelement data kann mit anwendungsspezifischen Daten versorgt werden, die zusätzliche Informationen, z.B. über den Dateideskriptor, enthalten.

Das Strukturelement events ist eine Bit-Maske, die aus folgenden Ereignistypen zusammen gestellt ist:

EPOLLIN

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

EPOLLPRI

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

EPOLLOUT

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

EPOLLERR

Es ist ein Fehler aufgetreten für den STREAM oder die Gerätedatei. Die Funktion epoll_wait() wartet immer auf dieses Ereignis. Es ist nicht notwendig, es bei der Funktion epoll_ctl() in events anzugeben.

EPOLLHUP

Im STREAM ist ein Hangup aufgetreten (die Verbindung zum Gerät ist unterbrochen). EPOLLHUP und EPOLLOUT schließen sich gegenseitig aus; auf einen Stream kann niemals geschrieben werden, wenn ein Hangup aufgetreten ist. Jedoch schließen sich dieses Ereignis und EPOLLIN bzw. EPOLLRDNORM, EPOLLRDBAND und EPOLLPRI nicht gegenseitig aus. Die Funktion epoll_wait() wartet immer auf dieses Ereignis. Es ist nicht notwendig EPOLLHUP bei der Funktion epoll_ctl() in events anzugeben.

EPOLLRDNORM

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

EPOLLWRNORM

wie EPOLLOUT.

EPOLLRDBAND

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

EPOLLWRBAND

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

EPOLLRDHUP

wie EPOLLHUP.

EPOLLET

Diese Funktionalität wird in POSIX nicht unterstützt. Daher wird hier nicht näher darauf eingegangen.

Returnwert

0

bei Erfolg.

 

-1

bei Fehler. errno wird gesetzt um den Fehler anzuzeigen.

Fehler

epoll_ctl() schlägt fehl, wenn gilt:


EBADF

epfd oder fd ist kein gültiger Dateideskriptor.


ENOENT

Der Parameter op hat den Wert EPOLL_CTL_MOD oder EPOLL_CTL_DEL und fd ist nicht bei dem epoll-Objekt epfd registriert.


EEXIST

op hat den Wert EPOLL_CTL_ADD, und der Dateideskriptor fd ist bereits bei dem epoll-Objekt epfd registriert.

 

EINVAL

epfd ist nicht der Dateideskriptor eines epoll-Objekts oder fd ist gleich epfd oder op hat keinen gültigen Wert.

Siehe auch

epoll_create(), epoll_wait()