.\" .\" epoll by Davide Libenzi ( efficient event notification retrieval ) .\" Copyright (C) 2003 Davide Libenzi .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program; if not, write to the Free Software .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA .\" .\" Davide Libenzi .\" .\" 2007-04-30: mtk, Added description of epoll_pwait() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EPOLL_WAIT 2 2012\-05\-02 Linux "Linux Programmer's Manual" .SH 名前 epoll_wait, epoll_pwait \- epoll ファイルディスクリプタの I/O イベントを待つ .SH 書式 .nf \fB#include \fP .sp \fBint epoll_wait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB);\fP \fBint epoll_pwait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB,\fP \fB const sigset_t *\fP\fIsigmask\fP\fB);\fP .fi .SH 説明 \fBepoll_wait\fP() システムコールは、ファイルディスクリプタ \fIepfd\fP で参照される \fBepoll\fP(7) インスタンスに対するイベントを待つ。 \fIevents\fP が指すメモリ領域には、 呼び出し側が利用可能なイベントが格納される。最大 \fImaxevents\fP 個のイベントが \fBepoll_wait\fP() によって返される。 \fImaxevents\fP 引き数は 0 より大きくなければならない。 \fItimeout\fP 引き数は、 \fBepoll_wait\fP() が停止する最小時間をミリ秒で指定 する (この停止時間はシステムクロックの粒度に切り上げられ、カーネルの スケジューリング遅延により少しだけ長くなる可能性がある)。 \fItimeout\fP を \-1 に指定すると、 \fBepoll_wait\fP() は無限に停止する。 \fItimeout\fP を 0 に指定すると、 \fBepoll_wait\fP() は利用可能なイベントが なくても、すぐに返る。 \fIstruct epoll_event\fP は以下のように定義される: .sp .in +4n .nf 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; /* ユーザデータ変数 */ }; .fi .in 返される構造体の \fIdata\fP メンバには、ユーザが \fBepoll_ctl\fP(2) (\fBEPOLL_CTL_ADD\fP, \fBEPOLL_CTL_MOD\fP) で指定したデータが格納される。 一方、 \fIevents\fP メンバには返された利用可能なイベントのビットフィールドが格納される。 .SS epoll_pwait() \fBepoll_wait\fP() と \fBepoll_pwait\fP() の関係は、 \fBselect\fP(2) と \fBpselect\fP(2) の関係と同様である。 \fBpselect\fP(2) 同様、 \fBepoll_pwait\fP() を使うと、アプリケーションは、ファイルディスクリプタが準備できた状態になるか、 シグナルが捕捉されるまで、安全に待つことができる。 以下の \fBepoll_pwait\fP() の呼び出しは、 .nf ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask); .fi 次の呼び出しを \fIatomic\fP に実行するのと等価である。 .nf sigset_t origmask; sigprocmask(SIG_SETMASK, &sigmask, &origmask); ready = epoll_wait(epfd, &events, maxevents, timeout); sigprocmask(SIG_SETMASK, &origmask, NULL); .fi .PP \fIsigmask\fP 引き数には NULL を指定してもよい。 その場合には、 \fBepoll_pwait\fP() は \fBepoll_wait\fP() と等価となる。 .SH 返り値 成功した場合、 \fBepoll_wait\fP() は要求された I/O に対して準備ができているファイルディスクリプタの数を返す。 また要求された \fItimeout\fP ミリ秒の間にファイルディスクリプタが準備できない場合は、0 を返す。 エラーが起こった場合、 \fBepoll_wait\fP() は \-1 を返し、 \fIerrno\fP を適切に設定する。 .SH エラー .TP \fBEBADF\fP \fIepfd\fP が有効なファイルディスクリプタでない。 .TP \fBEFAULT\fP \fIevents\fP で指されるメモリ領域に書き込み権限でアクセスできない。 .TP \fBEINTR\fP 要求されたどのイベントも発生せず、かつ \fItimeout\fP の期限が切れる前に、 システムコールがシグナルハンドラによって割り込まれた。 \fBsignal\fP(7) 参照。 .TP \fBEINVAL\fP \fIepfd\fP が \fBepoll\fP ファイルディスクリプタでない。 または \fImaxevents\fP が 0 以下である。 .SH バージョン .\" To be precise: kernel 2.5.44. .\" The interface should be finalized by Linux kernel 2.5.66. \fBepoll_wait\fP() はカーネル 2.6 で追加された。 ライブラリによるサポートは glibc バージョン 2.3.2 以降で提供されている。 \fBepoll_pwait\fP() はカーネル 2.6.19 で Linux に追加された。 ライブラリによるサポートは glibc バージョン 2.6 以降で提供されている。 .SH 準拠 \fBepoll_wait\fP() は Linux 独自である。 .SH 注意 あるスレッドが \fBepoll_pwait\fP() を呼び出して停止されている間に、 別のスレッドが wait 中の \fBepoll\fP インストールにファイルディスクリプタを 追加することがある。新しいファイルディスクリプタでイベントが発生すると、 \fBepoll_wait\fP() の呼び出しによる停止が解除されることになる。 .SH 関連項目 \fBepoll_create\fP(2), \fBepoll_ctl\fP(2), \fBepoll\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。