epoll_create, epoll_create1 - epoll
ファイルディスクリプタをオープンする
#include <sys/epoll.h>
int epoll_create(int size);
int epoll_create1(int flags);
epoll_create()は
epoll(7)
インスタンスを作成する。
Linux 2.6.8 以降では、
size
引き数は無視されるが、
0 より大きな値で
なければならない。下記の「注意」を参照。
epoll_create() は、新しい epoll
インスタンスを参照するファイルディスクリプタを返す。
このファイルディスクリプタは、その後の
epoll
インタフェースの呼び出しに使われる。
もう必要でなくなった場合は、
epoll_create()
で返されたファイルディスクリプタは
close(2)
を使ってクローズされるべきである。
ある epoll
インスタンスを参照する全てのファイルディスクリプタがクローズされると、
カーネルはそのインスタンスを破壊して、対応するリソースを解放し、
再使用できるようにする。
epoll_create1()¶
epoll_create1() は、
flags が 0
の場合、現在では使われていない
size
引き数がなくなっている点を除けば
epoll_create() と同じである。
flags
に以下の値をビット毎の論理和
(OR) で指定することで、
異なる動作をさせることができる。
- EPOLL_CLOEXEC
- 新しいファイルディスクリプタに対して
close-on-exec ( FD_CLOEXEC)
フラグをセットする。
このフラグが役に立つ理由については、
open(2) の O_CLOEXEC
フラグの説明を参照のこと。
返り値¶
成功すると、これらのシステムコールは
非負のファイルディスクリプタを返す。
エラーの場合、-1
を返し、
errno
にエラーを示す値を設定する。
エラー¶
- EINVAL
- size が正でない。
- EINVAL
- (epoll_create1()) flags
に無効な値が指定された。
- EMFILE
- /proc/sys/fs/epoll/max_user_instances
によって指定されている、epoll
インスタンスのユーザー単位の制限に達した。
更なる詳細については
epoll(7)
を参照のこと。
- ENFILE
- オープンされたファイルの総数がシステム制限に達した。
- ENOMEM
- カーネルオブジェクトを作成するのに十分なメモリがなかった。
バージョン¶
epoll_create() はカーネル 2.6
で追加された。
ライブラリによるサポートは
glibc バージョン 2.3.2
以降で提供されている。
epoll_create1() はカーネル 2.6.27
で追加された。
ライブラリによるサポートは
glibc バージョン 2.9
以降で提供されている。
epoll_create() は Linux
独自である。
初期の
epoll_create()
の実装では、
size
引き数は、呼び出し元が
epoll
インスタンスに追加しようとするファイルディスクリプタ数をカーネルに教えるのに
使われていた。カーネルはこの情報をイベントの情報を格納する内部データ構造に最
初に割り当てる大きさを決める際のヒントとして使用していた
(
size で渡された
ヒントよりも使用量が大きくなった場合には、必要に応じてカーネルは追加で領域を
割り当てる)。
現在では、このヒントはもはや必要なくなっている
(カーネルはヒントなしで必要な
データ構造のサイズを動的に変更する)
が、今も
size には 0
より大きい値を
指定しなければならない。これは、
epoll
を使うアプリケーションが古いカーネル
で実行される際の後方互換性を保証するためである。
関連項目¶
close(2),
epoll_ctl(2),
epoll_wait(2),
epoll(7)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。