IOCTL(2) | FreeBSD System Calls Manual | IOCTL(2) |
名称
ioctl — デバイスを制御するライブラリ
Standard C Library (libc, -lc)解説
ioctl() システムコールは、特殊ファイルの下層となっているデバイスのパラメータを操作します。特に、キャラクタ型特殊ファイル (たとえば、端末) の多数の操作属性は、 ioctl() で制御できます。引数 fd は、オープンしているファイル記述子でなければなりません。ioctl() への 3 番めの引数は、従来から char *argp と名前付けられています。しかしながら、 ioctl() のほとんどの使用法は、3 番めの引数が caddr_t または int である必要があります。
ioctl() の request は、引数が“in”引数なのか“out”引数なのかということと、引数 argp のサイズ (バイト単位) をエンコードします。 ioctl の request を指定するのに使用されるマクロと定義は、ファイル < sys/ioctl.h> の中にあります。
一般的な IOCTL
いくつかの一般的な ioctl は、すべてのタイプのファイル記述子に対して実装されていません。これらは、次の通りです:- FIONREAD int
- 直ちに読み込みのために利用可能なバイト数を取得します。
- FIONWRITE int
- 記述子の送信キューのバイト数を取得します。これらのバイトは、記述子に書き込まれているデータですが、更なる処理のためにカーネルによって保持されています。必要な処理の本質は、基本的な装置に依存しています。 TCP ソケットに関しては、これらのバイトは、接続の相手側によってまだ承認されていません。
- FIONSPACE int
- 記述子の送信キューの空き空間を取得します。この値は、キューの保持されるバイト数を引いた送信キューのサイズです。注意: この値は、キューに追加されるバイト数を表していますが、他のリソースの制限によって、ブロックするために送信キューの空間より大きくない書き込みが起こるかもしれません。そのような制限の 1 つは、ネットワーク接続への書き込みに対するネットワークバッファの不足となるでしょう。
戻り値
エラーが起きた場合は、-1 が返され、エラーを示すために errno が設定されます。エラー
ioctl() システムコールは、次の場合に失敗します:- [ EBADF]
- fd 引数が有効な記述子ではありません。
- [ ENOTTY]
- fd 引数がキャラクタ型特殊デバイスに対応していません。
- [ ENOTTY]
- 指定された要求は、記述子 fd が参照する種類のオブジェクトには適用されません。
- [ EINVAL]
- request または argp 引数が有効ではありません。
- [ EFAULT]
- argp 引数がプロセッサが割り当てたアドレス範囲外を指しています。
歴史
ioctl() 関数は、 Version 7 AT&T UNIX で登場しました。September 11, 2013 | FreeBSD |