epoll_ctl - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 準拠
- バグ
- 関連項目
名前
epoll_ctl - epoll ディスクリプタのインタフェースを制御する
書式
#include <sys/epoll.h>
int epoll_ctl(int
epfd
, int
op
, int
fd
, struct epoll_event *
event
)
説明
対象ファイルディスクリプタ
fd
への操作
op
の実行を要求し、
epoll
ディスクリプタ
epfd
を制御する。
event
はファイルディスクリプタ
fd
にリンクされたオブジェクトを記述する。
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; /* ユーザデータ変数 */
};
events
メンバは、以下のような使用可能なイベントタイプを使って構成された
ビットセットである。
-
EPOLLIN
-
関連付けられたファイルに対して、
read
(2) 操作が可能である。
-
EPOLLOUT
-
関連付けられたファイルに対して、
write
(2) 操作が可能である。
-
EPOLLRDHUP
-
ストリームソケットの他端が、コネクションの close 、
またはコネクションの書き込み側の shutdown を行った。
(このフラグを使うと、エッジトリガの監視を行う場合に、
通信のもう一端が閉じられたことを検知するコードを
非常に簡潔に書くことができる。)
-
EPOLLPRI
-
read
(2) 操作が可能な緊急 (urgent) データがある。
-
EPOLLERR
-
関連付けられたファイルディスクリプタにエラー条件が起こった。
epoll_wait
(2) は常にこのイベントを待つので、
events
に設定する必要はない。
-
EPOLLHUP
-
関連付けられたファイルディスクリプタにハングアップが起こった。
epoll_wait
(2) は常にこのイベントを待つので、
events
に設定する必要はない。
-
EPOLLET
-
関連付けられたファイルディスクリプタに
エッジトリガ動作 (Edge Triggered behaviour) を設定する。
epoll
のデフォルトの動作は、レベルトリガ (Level Triggered) である。
エッジトリガとレベルトリガによるイベント分配機構
(event distribution architectures) についての詳細な情報は、
epoll
(7) を参照すること。
-
EPOLLONESHOT
(カーネル 2.6.2 以降)
-
関連付けられたファイルディスクリプタに
一撃動作 (One-Shot behaviour) を設定する。
これはイベントが
epoll_wait
(2) によって引き出された後、
関連付けられたファイルディスクリプタが内部的に破棄され、
epoll
インタフェースによってイベントが報告されなくなることを意味する。
新しいイベントマスクでファイルディスクリプタを再度有効にするためには、
epoll_ctl
(2) に
EPOLL_CTL_MOD
を指定して呼び出さなければならない。
epoll
インタフェースは、
poll
(2) をサポートする全てのファイルディスクリプタをサポートする。
op
引き数に指定できる有効な値は、以下の通り:
-
EPOLL_CTL_ADD
-
対象ファイルディスクリプタ
fd
を
epoll
ディスクリプタ
epfd
に追加し、イベント
event
を
fd
にリンクされた内部ファイルに関連付ける。
-
EPOLL_CTL_MOD
-
イベント
event
を対象ファイルディスクリプタ
fd
に関連付けるように変更する。
-
EPOLL_CTL_DEL
-
対象ファイルディスクリプタ
fd
を
epoll
ファイルディスクリプタ
epfd
から削除する。
event
は無視されるので、NULL に設定することができる
(但し、下記の「バグ」の章を参照のこと)。
返り値
エラー
-
EBADF
-
epfd
か
fd
が有効なファイルディスクリプタでない。
-
EEXIST
-
op
が EPOLL_CTL_ADD であり、かつ与えられたファイルディスクリプタ
fd
が既に
epfd
に存在する。
-
EINVAL
-
epfd
が
epoll
ファイルディスクリプタでない。
または
fd
が
epfd
と同一である。
または要求された操作
op
がこのインタフェースでサポートされていない。
-
ENOENT
-
op
が EPOLL_CTL_MOD または EPOLL_CTL_DEL であり、かつ
fd
が
epfd
に存在しない。
-
ENOMEM
-
要求された
op
制御操作を扱うのに十分なメモリがない。
-
EPERM
-
対象ファイル
fd
が
epoll
をサポートしていない。
準拠
epoll_ctl
(2) は Linux カーネル 2.5.44 に導入された新しい API である。
インタフェースは Linux カーネル 2.5.66 で確定されるべきである。
バグ
2.6.9 より前のカーネルでは、
EPOLL_CTL_DEL
操作の際、引き数
event
に (たとえ無視される場合であっても) NULL でないポインタを渡す必要があった。
カーネル 2.6.9 以降では、
EPOLL_CTL_DEL
を使う際に
event
に NULL を指定できるようになっている。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする