2 .\" epoll by Davide Libenzi ( efficient event notification retrieval )
3 .\" Copyright (C) 2003 Davide Libenzi
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 License
16 .\" along with this program; if not, write to the Free Software
17 .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 .\" Davide Libenzi <davidel@xmailserver.org>
21 .\"*******************************************************************
23 .\" This file was generated with po4a. Translate the source file.
25 .\"*******************************************************************
26 .TH EPOLL_CTL 2 2012\-04\-15 Linux "Linux Programmer's Manual"
28 epoll_ctl \- epoll ディスクリプタのインタフェースを操作する
30 \fB#include <sys/epoll.h>\fP
32 \fBint epoll_ctl(int \fP\fIepfd\fP\fB, int \fP\fIop\fP\fB, int \fP\fIfd\fP\fB, struct
33 epoll_event *\fP\fIevent\fP\fB);\fP
35 このシステムコールは、ファイルディスクリプタ \fIepfd\fP が参照する \fBepoll\fP(7)
36 インスタンスに対する操作を行う。 対象のファイルディスクリプタ \fIfd\fP に対して、
37 操作 \fIop\fP の実行が要求される。
39 \fIop\fP 引き数に指定できる有効な値は以下の通りである。
42 対象のファイルディスクリプタ \fIfd\fP をファイルディスクリプタ \fIepfd\fP が参照する \fBepoll\fP インスタンスに登録し、イベント
43 \fIevent\fP を \fIfd\fP に結び付けられた内部ファイルに関連付ける。
46 イベント \fIevent\fP を対象のファイルディスクリプタ \fIfd\fP に関連付けるように変更する。
49 対象のファイルディスクリプタ \fIfd\fP を \fIepfd\fP が参照する \fBepoll\fP インスタンスから削除する。 \fIevent\fP
50 引き数は無視されるので、NULL にすることもできる (但し、下記の「バグ」を参照)。
52 \fIevent\fP 引き数は、ファイルディスクリプタ \fIfd\fP にリンクされたオブジェクトを表す。 \fIstruct epoll_event\fP
57 typedef union epoll_data {
65 uint32_t events; /* epoll イベント */
66 epoll_data_t data; /* ユーザデータ変数 */
71 \fIevents\fP メンバは、以下のような使用可能なイベントタイプを使って構成された ビットセットである。
74 関連付けられたファイルに対して、 \fBread\fP(2) 操作が可能である。
77 関連付けられたファイルに対して、 \fBwrite\fP(2) 操作が可能である。
79 \fBEPOLLRDHUP"\fP(Linux\fB2.6.17\fP以降)"
80 ストリームソケットの他端が、コネクションの close 、 またはコネクションの書き込み側の shutdown を行った。
81 (このフラグを使うと、エッジトリガの監視を行う場合に、 通信のもう一端が閉じられたことを検知するコードを 非常に簡潔に書くことができる。)
84 \fBread\fP(2) 操作が可能な緊急 (urgent) データがある。
87 関連付けられたファイルディスクリプタにエラー条件が起こった。 \fBepoll_wait\fP(2) は常にこのイベントを待つので、 \fIevents\fP
91 関連付けられたファイルディスクリプタにハングアップが起こった。 \fBepoll_wait\fP(2) は常にこのイベントを待つので、 \fIevents\fP
95 関連付けられたファイルディスクリプタに エッジトリガ動作 (Edge Triggered behavior) を設定する。 \fBepoll\fP
96 のデフォルトの動作は、レベルトリガ (Level Triggered) である。 エッジトリガとレベルトリガによるイベント分配機構 (event
97 distribution architectures) についての詳細な情報は、 \fBepoll\fP(7) を参照すること。
99 \fBEPOLLONESHOT\fP (Linux 2.6.2 以降)
100 関連付けられたファイルディスクリプタに 一撃動作 (One\-Shot behavior) を設定する。 これはイベントが
101 \fBepoll_wait\fP(2) によって引き出された後、 関連付けられたファイルディスクリプタが内部的に破棄され、 \fBepoll\fP
102 インタフェースによってイベントが報告されなくなることを意味する。 新しいイベントマスクでファイルディスクリプタを再度有効にするためには、
103 \fBepoll_ctl\fP() に \fBEPOLL_CTL_MOD\fP を指定して呼び出さなければならない。 \fIop\fP
104 引き数に指定できる有効な値は、以下の通り:
106 成功した場合、 \fBepoll_ctl\fP() は 0 を返す。 エラーが起こった場合、 \fBepoll_ctl\fP() は \-1 を返し、
107 \fIerrno\fP を適切に設定する。
111 \fIepfd\fP か \fIfd\fP が有効なファイルディスクリプタでない。
114 \fIop\fP が \fBEPOLL_CTL_ADD\fP であり、かつ与えられたファイルディスクリプタ \fIfd\fP がこの epoll
118 \fIepfd\fP が \fBepoll\fP ファイルディスクリプタでない。 または \fIfd\fP が \fIepfd\fP と同一である。 または要求された操作
119 \fIop\fP がこのインタフェースでサポートされていない。
122 \fIop\fP が \fBEPOLL_CTL_MOD\fP または \fBEPOLL_CTL_DEL\fP で、かつ \fIfd\fP がこの epoll
126 要求された \fIop\fP 制御操作を扱うのに十分なメモリがない。
129 epoll インスタンスに新しいファイルディスクリプタを登録 (\fBEPOLL_CTL_ADD\fP) しようとした際に、
130 \fI/proc/sys/fs/epoll/max_user_watches\fP で決まる上限に達した。 詳細は \fBepoll\fP(7) を参照。
133 対象ファイル \fIfd\fP が \fBepoll\fP をサポートしていない。
135 .\" To be precise: kernel 2.5.44.
136 .\" The interface should be finalized by Linux kernel 2.5.66.
137 \fBepoll_ctl\fP() はカーネル 2.6 で追加された。
139 \fBepoll_ctl\fP() は Linux 独自である。
140 ライブラリによるサポートは glibc バージョン 2.3.2 以降で提供されている。
142 \fBepoll\fP インタフェースは、 \fBpoll\fP(2) に対応している全てのファイルディスクリプタに対応している。
144 Linux 2.6.9 より前では、 \fBEPOLL_CTL_DEL\fP 操作の際、引き数 \fIevent\fP に (たとえ無視される場合であっても)
145 NULL でないポインタを渡す必要があった。 カーネル 2.6.9 以降では、 \fBEPOLL_CTL_DEL\fP を使う際に \fIevent\fP に
146 NULL を指定できるようになっている。 2.6.9 より前のカーネルへの移植性が必要なアプリケーションでは、 \fIevent\fP に NULL
149 \fBepoll_create\fP(2), \fBepoll_wait\fP(2), \fBpoll\fP(2), \fBepoll\fP(7)