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