.\" Copyright (C) 2003 Davide Libenzi .\" Davide Libenzi .\" .\" %%%LICENSE_START(GPLv2+_SW_3_PARA) .\" 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 manual; if not, see .\" . .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2004-2005 Yuichi SATO .\" all rights reserved. .\" Translated 2004-06-15, Yuichi SATO .\" Updated & Modified 2004-12-29, Yuichi SATO .\" Updated & Modified 2005-04-20, Yuichi SATO .\" Updated & Modified 2005-09-06, Akihiro MOTOKI .\" Updated 2006-07-19, Akihiro MOTOKI , LDP v2.36 .\" Updated 2009-02-23, Akihiro MOTOKI , LDP v3.19 .\" .TH EPOLL_CTL 2 2012\-04\-15 Linux "Linux Programmer's Manual" .SH 名前 epoll_ctl \- epoll ディスクリプタのインタフェースを操作する .SH 書式 \fB#include \fP .sp \fBint epoll_ctl(int \fP\fIepfd\fP\fB, int \fP\fIop\fP\fB, int \fP\fIfd\fP\fB, struct epoll_event *\fP\fIevent\fP\fB);\fP .SH 説明 このシステムコールは、ファイルディスクリプタ \fIepfd\fP が参照する \fBepoll\fP(7) インスタンスに対する操作を行う。 対象のファイルディスクリプタ \fIfd\fP に対して、 操作 \fIop\fP の実行が要求される。 \fIop\fP 引き数に指定できる有効な値は以下の通りである。 .TP \fBEPOLL_CTL_ADD\fP 対象のファイルディスクリプタ \fIfd\fP をファイルディスクリプタ \fIepfd\fP が参照する \fBepoll\fP インスタンスに登録し、イベント \fIevent\fP を \fIfd\fP に結び付けられた内部ファイルに関連付ける。 .TP \fBEPOLL_CTL_MOD\fP イベント \fIevent\fP を対象のファイルディスクリプタ \fIfd\fP に関連付けるように変更する。 .TP \fBEPOLL_CTL_DEL\fP 対象のファイルディスクリプタ \fIfd\fP を \fIepfd\fP が参照する \fBepoll\fP インスタンスから削除する。 \fIevent\fP 引き数は無視されるので、NULL にすることもできる (但し、下記の「バグ」を参照)。 .PP \fIevent\fP 引き数は、ファイルディスクリプタ \fIfd\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 \fIevents\fP メンバは、以下のような使用可能なイベントタイプを使って構成された ビットセットである。 .TP \fBEPOLLIN\fP 関連付けられたファイルに対して、 \fBread\fP(2) 操作が可能である。 .TP \fBEPOLLOUT\fP 関連付けられたファイルに対して、 \fBwrite\fP(2) 操作が可能である。 .TP \fBEPOLLRDHUP"\fP(Linux\fB2.6.17\fP以降)" ストリームソケットの他端が、コネクションの close 、 またはコネクションの書き込み側の shutdown を行った。 (このフラグを使うと、エッジトリガの監視を行う場合に、 通信のもう一端が閉じられたことを検知するコードを 非常に簡潔に書くことができる。) .TP \fBEPOLLPRI\fP \fBread\fP(2) 操作が可能な緊急 (urgent) データがある。 .TP \fBEPOLLERR\fP 関連付けられたファイルディスクリプタにエラー条件が起こった。 \fBepoll_wait\fP(2) は常にこのイベントを待つので、 \fIevents\fP に設定する必要はない。 .TP \fBEPOLLHUP\fP 関連付けられたファイルディスクリプタにハングアップが起こった。 \fBepoll_wait\fP(2) は常にこのイベントを待つので、 \fIevents\fP に設定する必要はない。 .TP \fBEPOLLET\fP 関連付けられたファイルディスクリプタに エッジトリガ動作 (Edge Triggered behavior) を設定する。 \fBepoll\fP のデフォルトの動作は、レベルトリガ (Level Triggered) である。 エッジトリガとレベルトリガによるイベント分配機構 (event distribution architectures) についての詳細な情報は、 \fBepoll\fP(7) を参照すること。 .TP \fBEPOLLONESHOT\fP (Linux 2.6.2 以降) 関連付けられたファイルディスクリプタに 一撃動作 (One\-Shot behavior) を設定する。 これはイベントが \fBepoll_wait\fP(2) によって引き出された後、 関連付けられたファイルディスクリプタが内部的に破棄され、 \fBepoll\fP インタフェースによってイベントが報告されなくなることを意味する。 新しいイベントマスクでファイルディスクリプタを再度有効にするためには、 \fBepoll_ctl\fP() に \fBEPOLL_CTL_MOD\fP を指定して呼び出さなければならない。 \fIop\fP 引き数に指定できる有効な値は、以下の通り: .SH 返り値 成功した場合、 \fBepoll_ctl\fP() は 0 を返す。 エラーが起こった場合、 \fBepoll_ctl\fP() は \-1 を返し、 \fIerrno\fP を適切に設定する。 .SH エラー .TP \fBEBADF\fP \fIepfd\fP か \fIfd\fP が有効なファイルディスクリプタでない。 .TP \fBEEXIST\fP \fIop\fP が \fBEPOLL_CTL_ADD\fP であり、かつ与えられたファイルディスクリプタ \fIfd\fP がこの epoll インスタンスに既に登録されている。 .TP \fBEINVAL\fP \fIepfd\fP が \fBepoll\fP ファイルディスクリプタでない。 または \fIfd\fP が \fIepfd\fP と同一である。 または要求された操作 \fIop\fP がこのインタフェースでサポートされていない。 .TP \fBENOENT\fP \fIop\fP が \fBEPOLL_CTL_MOD\fP または \fBEPOLL_CTL_DEL\fP で、かつ \fIfd\fP がこの epoll インスタンスに登録されていない。 .TP \fBENOMEM\fP 要求された \fIop\fP 制御操作を扱うのに十分なメモリがない。 .TP \fBENOSPC\fP epoll インスタンスに新しいファイルディスクリプタを登録 (\fBEPOLL_CTL_ADD\fP) しようとした際に、 \fI/proc/sys/fs/epoll/max_user_watches\fP で決まる上限に達した。 詳細は \fBepoll\fP(7) を参照。 .TP \fBEPERM\fP 対象ファイル \fIfd\fP が \fBepoll\fP をサポートしていない。 .SH バージョン .\" To be precise: kernel 2.5.44. .\" The interface should be finalized by Linux kernel 2.5.66. \fBepoll_ctl\fP() はカーネル 2.6 で追加された。 .SH 準拠 \fBepoll_ctl\fP() は Linux 独自である。 ライブラリによるサポートは glibc バージョン 2.3.2 以降で提供されている。 .SH 注意 \fBepoll\fP インタフェースは、 \fBpoll\fP(2) に対応している全てのファイルディスクリプタに対応している。 .SH バグ Linux 2.6.9 より前では、 \fBEPOLL_CTL_DEL\fP 操作の際、引き数 \fIevent\fP に (たとえ無視される場合であっても) NULL でないポインタを渡す必要があった。 カーネル 2.6.9 以降では、 \fBEPOLL_CTL_DEL\fP を使う際に \fIevent\fP に NULL を指定できるようになっている。 2.6.9 より前のカーネルへの移植性が必要なアプリケーションでは、 \fIevent\fP に NULL でないポインタを指定すべきである。 .SH 関連項目 \fBepoll_create\fP(2), \fBepoll_wait\fP(2), \fBpoll\fP(2), \fBepoll\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。