epoll_wait - システムコールの説明 - Linux コマンド集 一覧表
名前
epoll_wait - epoll ファイルディスクリプタの I/O イベントを待つ
書式
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
説明
epoll
ファイルディスクリプタ
epfd
のイベントを最大
timeout
ミリ秒待つ。
events
が指すメモリ領域には、呼び出し側が利用可能なイベントが格納される。
最大
maxevents
個のイベントが
epoll_wait
(2) によって返される。
maxevents
引き数は 0 より大きくなければならない。
timeout
を -1 に指定すると、
epoll_wait
(2) は無限に待つ。
また
timeout
を 0 に指定すると、
epoll_wait
(2) はイベントが利用可能でなくても、すぐに返る (返り値は 0 である)。
struct epoll_event
は以下のように定義される:
typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;
struct epoll_event { __uint32_t events; /* epoll イベント */ epoll_data_t data; /* ユーザデータ変数 */ };
返される構造体の data メンバは、ユーザが epoll_ctl (2) ( EPOLL_CTL_ADD , EPOLL_CTL_MOD ) で指定したデータが格納される。 一方、 events メンバには返された利用可能なイベントのビットフィールドが格納される。
返り値
成功した場合、 epoll_wait (2) は要求された I/O に対して準備ができているファイルディスクリプタの数を返す。 また要求された timeout ミリ秒の間にファイルディスクリプタが準備できない場合は、0 を返す。 エラーが起こった場合、 epoll_wait (2) は -1 を返し、 errno が適切に設定される。
エラー
- EBADF
- epfd が有効なファイルディスクリプタでない。
- EFAULT
- events で指されるメモリ領域が書き込み権限でアクセスできない。
- EINTR
- 要求されたどのイベントも起きないうちに、または timeout の期限が切れる前に、この呼び出しがシグナルハンドラによって割り込まれた。
- EINVAL
- epfd が epoll ファイルディスクリプタでない。 または maxevents が 0 以下である。
準拠
epoll_wait (2) は Linux カーネル 2.5.44 に導入された新しい API である。 インタフェースは Linux カーネル 2.5.66 で確定されるべきである。