2012-04-04 14 views
5

selectepollに置き換えるために、マルチスレッドLinux-2.6.32 +アプリケーションを書き換えています。 epoll_create1(2)ためepoll_create()の代わりにepoll_create1()を使用する利点

manページがあることを宣言:

フラグは、その後、廃止されたサイズの引数がドロップされるという事実以外の0である場合には、epoll_create1())(epoll_createと同じです。

はまだ、maxeventsとしてepoll_wait(2)に使用されるこの時代遅れのサイズ引数ではないでしょうか?

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

これは、ファイルディスクリプタを使用しているとき、我々はepoll_create1内のイベントの最大数を宣言避けることができることを意味しますが、遅かれ早かれ、我々はepoll_waitを呼び出すときにそれを参照する必要がありますか?もしそうなら、epoll_create1をゲームに持ち込むのは何ですか?

この件について教えていただきありがとうございます。

答えて

6

いいえ、epoll_waitと、maxeventsは、返されるイベントの最大数を返します。これは、カーネル内で維持されるメンバの数とは関係ありません。

旧バージョンのepoll_createは、特定の制限を設定するためにサイズを使用しましたが、使用されなくなったため、size引数は廃止されました。

epoll_create1を使用する利点は、フラグを指定できることです。これは現在、close-on-execに制限されていると考えられます(exec別のプロセスを実行すると、ファイル記述子が自動的に閉じられます)。

+0

感謝を合計FD回数をカウントしませんこの。 'epoll_create1'では、カーネル自体に内部構造の次元を与えました。私は 'maxevents'パラメータも落とされると考えていましたが、そうではありません。 – noisebleed

1

epoll_create1()は、フラグを設定する方法を提供します。今すぐサイズを設定する必要はありません。カーネルのソースコード内の実際

:/fs/eventpoll.c

​​

max_eventsはリターンを制御するためのものであるepoll_wait() parameteがFD全体eventpoll構造体に説明するための

+0

これで 'epoll_create'の' size'引数と 'epoll_wait'の' maxevents'は同じものではないことがわかりました。ありがとう。 – noisebleed

関連する問題