1 .\" Copyright (C) 2003 Davide Libenzi
2 .\" Davide Libenzi <davidel@xmailserver.org>
4 .\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
5 .\" This program is free software; you can redistribute it and/or modify
6 .\" it under the terms of the GNU General Public License as published by
7 .\" the Free Software Foundation; either version 2 of the License, or
8 .\" (at your option) any later version.
10 .\" This program is distributed in the hope that it will be useful,
11 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
12 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 .\" GNU General Public License for more details.
15 .\" You should have received a copy of the GNU General Public
16 .\" License along with this manual; if not, see
17 .\" <http://www.gnu.org/licenses/>.
20 .\" 2007-04-30: mtk, Added description of epoll_pwait()
22 .\"*******************************************************************
24 .\" This file was generated with po4a. Translate the source file.
26 .\"*******************************************************************
28 .\" Japanese Version Copyright (c) 2004-2005 Yuichi SATO
29 .\" all rights reserved.
30 .\" Translated Wed Jun 16 03:05:40 JST 2004
31 .\" by Yuichi SATO <ysato444@yahoo.co.jp>
32 .\" Updated & Modified Tue Apr 19 07:05:42 JST 2005 by Yuichi SATO
33 .\" Updated 2007-06-02, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.51
34 .\" Updated 2009-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.18
35 .\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
36 .\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
37 .\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
39 .TH EPOLL_WAIT 2 2014\-08\-19 Linux "Linux Programmer's Manual"
41 epoll_wait, epoll_pwait \- epoll ファイルディスクリプタの I/O イベントを待つ
44 \fB#include <sys/epoll.h>\fP
46 \fBint epoll_wait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP
47 \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB);\fP
48 \fBint epoll_pwait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP
49 \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB,\fP
50 \fB const sigset_t *\fP\fIsigmask\fP\fB);\fP
53 \fBepoll_wait\fP() システムコールは、ファイルディスクリプタ \fIepfd\fP で参照される
54 \fBepoll\fP(7) インスタンスに対するイベントを待つ。 \fIevents\fP が指すメモリ領域には、
55 呼び出し側が利用可能なイベントが格納される。最大 \fImaxevents\fP 個のイベントが
56 \fBepoll_wait\fP() によって返される。
57 \fImaxevents\fP 引き数は 0 より大きくなければならない。
59 \fItimeout\fP 引き数は \fBepoll_wait\fP() が停止する時間をミリ秒で指定する。 \fBepoll_wait\fP()
60 の呼び出しは以下のいずれかになるまで停止する。
64 呼び出しがシグナルハンドラーにより割り込まれた
68 \fItimeout\fP 時間はシステムクロックの粒度に切り上げられ、カーネルのスケジューリング遅延により少しだけ長くなる可能性がある点に注意すること。
69 \fItimeout\fP を \-1 に指定すると、 \fBepoll_wait\fP() は無限に停止する。 \fItimeout\fP を 0 に指定すると、
70 \fBepoll_wait\fP() は利用可能なイベントがなくても、すぐに返る。
72 \fIstruct epoll_event\fP は以下のように定義される。
76 typedef union epoll_data {
84 uint32_t events; /* epoll イベント */
85 epoll_data_t data; /* ユーザデータ変数 */
90 返される構造体の \fIdata\fP メンバには、ユーザが \fBepoll_ctl\fP(2) (\fBEPOLL_CTL_ADD\fP,
91 \fBEPOLL_CTL_MOD\fP) で指定したデータが格納される。 一方、 \fIevents\fP
92 メンバには返された利用可能なイベントのビットフィールドが格納される。
94 \fBepoll_wait\fP() と \fBepoll_pwait\fP() の関係は、 \fBselect\fP(2) と \fBpselect\fP(2)
95 の関係と同様である。 \fBpselect\fP(2) 同様、 \fBepoll_pwait\fP()
96 を使うと、アプリケーションは、ファイルディスクリプタが準備できた状態になるか、 シグナルが捕捉されるまで、安全に待つことができる。
98 以下の \fBepoll_pwait\fP() の呼び出しは、
101 ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);
104 次の呼び出しを \fIatomic\fP に実行するのと等価である。
109 sigprocmask(SIG_SETMASK, &sigmask, &origmask);
110 ready = epoll_wait(epfd, &events, maxevents, timeout);
111 sigprocmask(SIG_SETMASK, &origmask, NULL);
114 \fIsigmask\fP 引き数には NULL を指定してもよい。 その場合には、 \fBepoll_pwait\fP() は \fBepoll_wait\fP()
117 成功した場合、 \fBepoll_wait\fP() は要求された I/O に対して準備ができているファイルディスクリプタの数を返す。 また要求された
118 \fItimeout\fP ミリ秒の間にファイルディスクリプタが準備できない場合は、0 を返す。 エラーが起こった場合、 \fBepoll_wait\fP() は
119 \-1 を返し、 \fIerrno\fP を適切に設定する。
123 \fIepfd\fP が有効なファイルディスクリプタでない。
126 \fIevents\fP で指されるメモリ領域に書き込み権限でアクセスできない。
129 (1) 要求されたどのイベントも発生せず、かつ (2) \fItimeout\fP の期限が切れる前に、システムコールがシグナルハンドラによって割り込まれた。
133 \fIepfd\fP が \fBepoll\fP ファイルディスクリプタでない。 または \fImaxevents\fP が 0 以下である。
135 .\" To be precise: kernel 2.5.44.
136 .\" The interface should be finalized by Linux kernel 2.5.66.
137 \fBepoll_wait\fP() はカーネル 2.6 で追加された。
138 ライブラリによるサポートは glibc バージョン 2.3.2 以降で提供されている。
140 \fBepoll_pwait\fP() はカーネル 2.6.19 で Linux に追加された。
141 ライブラリによるサポートは glibc バージョン 2.6 以降で提供されている。
143 \fBepoll_wait\fP() は Linux 独自である。
145 あるスレッドが \fBepoll_pwait\fP() を呼び出して停止されている間に、
146 別のスレッドが wait 中の \fBepoll\fP インストールにファイルディスクリプタを
147 追加することがある。新しいファイルディスクリプタでイベントが発生すると、
148 \fBepoll_wait\fP() の呼び出しによる停止が解除されることになる。
150 \fBepoll_wait\fP() で監視中の \fBepoll\fP
151 インスタンス内のファイルディスクリプタが別のスレッドによってクローズされた場合に何が起こるかの議論については、 \fBselect\fP(2)
154 バージョン 2.6.37 より前のカーネルでは、おおよそ \fILONG_MAX / HZ\fP ミリ秒より大きい \fItimeout\fP 値は \-1
155 (つまり無限大) として扱われる。したがって、例えば、\fIsizeof(long)\fP が 4 で、カーネルの \fIHZ\fP の値が 1000
156 のシステムでは、 35.79 分よりも大きなタイムアウトは無限大として扱われるということである。
157 .SS "C ライブラリとカーネル ABI の違い"
158 素の \fBepoll_pwait\fP() システムコールは 6 番目の引き数 \fIsize_t sigsetsize\fP を取る。 この引き数は
159 \fIsigmask\fP 引き数のバイト単位のサイズを指定する。 glibc の \fBepoll_pwait\fP() ラッパー関数は、この引き数に固定値
160 (\fIsizeof(sigset_t)\fP と同じ) を指定する。
162 \fBepoll_create\fP(2), \fBepoll_ctl\fP(2), \fBepoll\fP(7)
164 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
165 である。プロジェクトの説明とバグ報告に関する情報は
166 http://www.kernel.org/doc/man\-pages/ に書かれている。