ioctl - デバイスを制御する
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request,
...);
ioctl()
関数はスペシャルファイルを構成するデバイスのパラメーターを
操作する。特に、キャラクター型のスペシャルファイル
(例えば端末 (terminal))
の多くの動作特性を
ioctl()
リクエストによって制御することができる。引き数
fd
はオープンされたファイルディスクリプターでなければならない。
2
番目の引き数は、デバイス依存のリクエストコードである。
3
番目の引き数は、メモリーへの型を指定しないポインターである。
この引き数は伝統的に
(C で
void *
という書き方が有効になる前から)
char *argp
と表記されている。したがって、この文章でもそう名付けることとする。
ioctl() の
request には、
その引き数が
入力
パラメーターと
出力
パラメーターのどちらであるかの区別や、
argp
引き数のバイト単位のサイズ、といった情報がエンコードされている。
ioctl() の
request
を指定するためのマクロ
(macro) と定義は
<sys/ioctl.h>
ファイルにある。
たいていの場合、成功するとゼロが返される。
ただし、
ioctl()
リクエストの中にはパラメーターの出力に返り値を使用しているものが若干あり、
その場合は、成功したときに非負の値が返される。
エラーの場合は -1
が返され、
errno
が適切に設定される。
- EBADF
-
fd
が無効なディスクリプターである。
- EFAULT
-
argp
がアクセス不可能なメモリーを参照している。
- EINVAL
-
request または argp
が不正である。
- ENOTTY
-
fd
がキャラクター型のスペシャルデバイスを参照していない。
- ENOTTY
- 指定されたリクエストはディスクリプター
fd
が参照する種類のオブジェクトには適用することができない。
どれか一つの標準に対応しているわけではない。
ioctl()
の引き数、返り値、解釈は、処理対象のデバイスドライバごとに
異なる (この関数は UNIX
の ストリーム I/O モデル
に
きちんと適合していない操作のための便利屋として使用される)。
よく知られている
ioctl()
のリストについては
ioctl_list(2)
を参照すること。
ioctl() 関数コールは Version 7
AT&T UNIX で登場した。
このシステムコールを使うには、オープンされたファイルディスクリプターが
必要である。
open(2)
コールはしばしば望んでいない副作用を伴うことがあるが、Linux
では
open(2) に
O_NONBLOCK
フラグをつけることでこの副作用を避けることができる。
execve(2),
fcntl(2),
ioctl_list(2),
open(2),
sd(4),
tty(4)
この man ページは Linux
man-pages
プロジェクトのリリース
3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。