EPOLL_WAIT
Section: Linux Programmer's Manual (2)
Updated: 2007-04-30
Index
JM Home Page
roff page
名前
epoll_wait, epoll_pwait - epoll ファイルディスクリプタの I/O イベントを待つ
書式
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
int epoll_pwait(int epfd, struct epoll_event *events,
int maxevents, int timeout,
const sigset_t *sigmask);
説明
epoll_wait()
システムコールは、
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_pwait()
epoll_wait()
と
epoll_pwait()
の関係は、
select(2)
と
pselect(2)
の関係と同様である。
pselect(2)
同様、
epoll_pwait()
を使うと、アプリケーションは、ファイルディスクリプタが準備できた状態になるか、
シグナルが捕捉されるまで、安全に待つことができる。
以下の
epoll_pwait()
の呼び出しは、
ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);
次の呼び出しを
atomic
に実行するのと等価である。
sigset_t origmask;
sigprocmask(SIG_SETMASK, &sigmask, &origmask);
ready = epoll_wait(epfd, &events, maxevents, timeout);
sigprocmask(SIG_SETMASK, &origmask, NULL);
返り値
成功した場合、
epoll_wait(2)
は要求された I/O に対して準備ができているファイルディスクリプタの数を返す。
また要求された
timeout
ミリ秒の間にファイルディスクリプタが準備できない場合は、0 を返す。
エラーが起こった場合、
epoll_wait(2)
は -1 を返し、
errno
を適切に設定する。
エラー
- EBADF
-
epfd
が有効なファイルディスクリプタでない。
- EFAULT
-
events
で指されるメモリ領域に書き込み権限でアクセスできない。
- EINTR
-
要求されたどのイベントも発生せず、かつ
timeout
の期限が切れる前に、システムコールがシグナルハンドラによって割り込まれた。
- EINVAL
-
epfd
が
epoll
ファイルディスクリプタでない。
または
maxevents
が 0 以下である。
バージョン
epoll_pwait()
はカーネル 2.6.19 で Linux に追加された。
epoll_pwait()
の glibc でのサポートは glibc 2.6 以降で提供されている。
準拠
epoll_wait(2)
は Linux 独自であり、カーネル 2.5.44 で導入された。
関連項目
epoll_create(2),
epoll_ctl(2),
epoll(7)
Index
- 名前
-
- 書式
-
- 説明
-
- epoll_pwait()
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:38 GMT, November 19, 2007