2012-04-04 4 views
5

Ich schreibe eine Multithread Linux-2.6.32 + -Anwendung um select mit epoll zu ersetzen.Was ist der Vorteil der Verwendung von epoll_create1() anstelle von epoll_create()

Die Man-Pages für epoll_create1(2) erklären:

Wenn Flags 0 ist, dann, außer der Tatsache, dass die veraltete Größe Argument fallen gelassen wird, epoll_create1() als epoll_create gleich ist().

Doch ist das nicht obsolet Größe Argument in epoll_wait(2) als maxevents verwendet?

epoll_wait(int epfd, struct epoll_event *events, 
        int maxevents, int timeout); 

Das bedeutet, wenn epoll nutzen wir die maximale Anzahl der Ereignisse in epoll_create1 erklärt vermeiden können, aber früher oder später haben wir es zu verweisen, wenn epoll_wait Aufruf? Wenn ja, was bringt es, epoll_create1 ins Spiel zu bringen?

Danke für die Aufklärung zu diesem Thema.

Antwort

6

Nein, mit epoll_wait, maxevents teilt Ihnen die maximale Anzahl der Ereignisse mit, die zurückgegeben werden. Es hat nichts damit zu tun, wie viele innerhalb des Kernels gepflegt werden.

Ältere Versionen von epoll_create verwendet die Größe, um bestimmte Grenzen festzulegen, aber es wird nicht mehr verwendet, daher der Kommentar, dass das size Argument veraltet ist. Der Vorteil der Verwendung von epoll_create1 besteht darin, dass Sie die Flags angeben können, von denen ich glaube, dass sie derzeit auf close-on-exec beschränkt sind (so dass der Dateideskriptor automatisch geschlossen wird, wenn ein anderer Prozess gestartet wird).

+0

Dank für das Erklären Dies. In "epoll_create1" lasse ich den Kernel selbst seine internen Strukturen dimensionieren, in Ordnung. Ich dachte, der 'maxevents' Parameter würde ebenfalls fallen gelassen werden, aber das ist nicht der Fall. – noisebleed

1

die epoll_create1() liefern eine Möglichkeit, ein Flag zu setzen. Unnötig, jetzt die Größe einzustellen.

tatsächlich in dem Kernel-Quellcode: /fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size) 
{ 
    if (size <= 0) 
     return -EINVAL; 

    return sys_epoll_create1(0); 
} 

die epoll_wait() paramete max_events für die Rückkehr zu steuern ist fd zählt nicht die Gesamtzahl fd in dem ganzen eventpoll struct

+0

OK, ich sehe jetzt, dass das Argument 'size' von' epoll_create' und 'maxevents' von' epoll_wait' nicht dasselbe ist. Vielen Dank. – noisebleed