EN JA
IOCTL(2)
IOCTL(2) FreeBSD System Calls Manual IOCTL(2)

名称

ioctlデバイスを制御する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/ioctl.h>

int
ioctl( int fd, unsigned long request, ...);

解説

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 引数がプロセッサが割り当てたアドレス範囲外を指しています。

関連項目

execve(2), fcntl(2), intro(4), tty(4)

歴史

ioctl() 関数は、 Version 7 AT&T UNIX で登場しました。
September 11, 2013 FreeBSD