書式
#include <sys/ioctl.h>int ioctl(int d, unsigned long request, ...);
説明
ioctl() 関数はスペシャルファイルを構成するデバイスのパラメータを 操作する。特に、キャラクタ型のスペシャルファイル (例えば端末 (terminal)) の多くの動作特性を ioctl() リクエストによって制御することができる。引き数 d はオープンされたファイルディスクリプタでなければならない。2 番目の引き数は、デバイス依存のリクエストコードである。 3 番目の引き数は、メモリへの型を指定しないポインタである。 この引き数は伝統的に (C で void * という書き方が有効になる前から) char *argp と表記されている。したがって、この文章でもそう名付けることとする。
ioctl() の request には、 その引き数が 入力 パラメータと 出力 パラメータのどちらであるかの区別や、 argp 引き数のバイト単位のサイズ、といった情報がエンコードされている。 ioctl() の request を指定するためのマクロ (macro) と定義は <sys/ioctl.h> ファイルにある。
返り値
たいていの場合、成功するとゼロが返される。 ただし、 ioctl() リクエストの中にはパラメータの出力に返り値を使用しているものが若干あり、 その場合は、成功したときに非負の値が返される。 エラーの場合は -1 が返され、 errno が適切に設定される。エラー
- EBADF
- d が有効なディスクリプタではない。
- EFAULT
- argp がアクセス不可能なメモリを参照している。
- EINVAL
- request または argp が不正である。
- ENOTTY
- d がキャラクタ型のスペシャルデバイスを参照していない。
- ENOTTY
- 指定されたリクエストはディスクリプタ d が参照する種類のオブジェクトには適用することができない。
