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
epfdepoll ファイルディスクリプタでない。 または 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