構文
#include <sys/ioctl.h>
ioctl(fildes, request, arg)
int fildes, request;
説明
システムコール ioctl(2) により、オープンしているデバイスを制御できます。
このインクルードファイルには、 ioctl(2) で使用される一般的な特性を持つ リクエスト と 引き数 が記述されています。 各リクエストが特定のデバイスに対してどのように影響するかについては、
第 7 章のそのデバイスのマニュアルを参照してください。 もし、デバイスが ioctl
のあるリクエストをサポートしていなかった 場合には、 EINVAL が返されます。
| FIONREAD | | すぐに読み出すことのできる文字数を、デバイスファイルから、アドレスが arg の long 整数で返します。 |
| FIOSSAIOSTAT | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、アドレスが arg の整数が 0 でないならば、 システムの非同期の I/O を有効にします。すなわち、
デバイスファイルに依存したイベントが生じた時に SIGIO を、その時に FIOSSAIOOWN (下を参照) で指定されていたプロセスに送るようにします。
もし、 FIOSSAIOOWN でプロセスが指定されていなかった場合には
そのデバイスファイルを最初にオープンしたプロセスに SIGIO を送るようにします。 もし指定されたプロセスが終了してしまった場合には、 SIGIO シグナル
はどこにも送られません。 arg のアドレスの指す整数が 0 である場合には、非同期の I/O
を無効にします。 |
| FIOGSAIOSTAT | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、
非同期の I/O が有効になっていれば、アドレスが arg の整数は 1 にセットされます。 そうでなければ、アドレスが arg の整数は 0 にセットされます。 |
| FIOSSAIOOWN | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、 arg のアドレスに入っている整数の値に、非同期の I/O によって送られる SIGIO シグナルを受けとるプロセスの
ID をセットします。 適切な特権を持つユーザーは、任意のプロセスが SIGIO シグナル
を受けとるように指定できます。 もし、スーパーユーザー以外によるリクエストである場合には、
呼び出しプロセスが、 SIGIO シグナルを受けとるプロセスとして指定できるのは、
そのプロセス自身か、あるいはそのプロセス と同じ実ユーザ ID または実効ユーザー
ID を持つプロセスか、またはそのプロセスの子孫のプロセスのみです。
もし、arg のアドレスに入っている整数で指定されたプロセス が見つからなかった場合には呼び出しは失敗し、 errno が ESRCH にセットされます。
スーパーユーザー以外が呼び出した場合、呼び出しプロセスが、 そのプロセス自身ではなく、(1) そのプロセスと同じ実ユーザ
ID または実効ユーザー ID を持つ別のプロセスを指定した場合、あるいは
(2) そのプロセスの子孫でもないプロセスを指定した場合には、 呼び出しは失敗し、 errno が EPERM にセットされます。 もし指定されたプロセスがその後に終了してしまった場合には、 SIGIO シグナル
はどこにも送られません。 デバイスファイルをオープンしたとき、オープンを行なったプロセスは SIGIO シグナルを受けとるようにデフォルトでは
指定されます。 |
| FIOGSAIOOWN | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、
アドレスが arg である整数が、 SIGIO シグナルを受け取るように指定されている
プロセス ID にセットされます。 |
| FIOSNBIO | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、
アドレスが arg である整数が 0 でなければ、ノンブロッキング I/O を有効にします。すなわち、
それ以降のそのデバイスファイルへの読み出し、書き込みは ノンブロッキングモード (下を参照) で扱われます。
もし、アドレスが arg である整数が 0 であれば、ノンブロッキング I/O を無効にします。 読み出しでは、ノンブロッキング I/O が有効な時は、そのデバイスへのすべての読み出し要求は、それが成功したか
失敗したかに関わらず、ブロックしません。 これらの読み出し要求は、以下の 3 つのいずれかで終了します。 すべての要求を満たすだけの充分なデータがある場合、読み出しは正常に終了し、
すべてのデータを読み出し、読み出したバイト数を返す。 すべての要求を満たすだけの充分なデータがない場合、読み出しは正常に終了し、
すべてのデータを読み出し、読み出すことのできたバイト数を返す。 もし読み出せるデータがなかった場合には、読み出しは失敗し、 errno は EWOULDBLOCK に設定されます。
書き込みの時にも、ノンブロッキング I/O が有効な時は、そのデバイスへのすべての読み出し要求は、それが成功したか、
失敗したかに関わらず、ブロックしません。 これらの書き込み要求は、以下の 3 つのいずれかで終了します。 システムにすべてのデータを収めるのに充分な使用可能領域があった場合、
書き込みは正常に終了し、すべてのデータを書き出し、 書いたバイト数を返します。 要求全体を収めるのに充分なスペースがなかった場合には、
書き込みは正常に終了し、可能なだけのデータを書き出し、 書くことのできたバイト数を返します。 バッファにスペースが全くなかった場合、書き込みは失敗し、 errno に EWOULDBLOCK がセットされます。
ノンブロッキング I/O が O_NDELAY フラグ
(open(2) 、 fcntl(2) を参照) に干渉するのを防ぐために、 O_NDELAY の
機能は、 つねに、ノンブロッキング I/O の機能に優先します。 これは、 O_NDELAY がセットされていれば、 O_NDELAY の定義に従って読み出し要求を行うことを意味します。 O_NDELAY がセットされていなければ、ノンブロッキング I/O
の定義が適用されます。 デバイスファイルをオープンしたとき、デフォルトでは、 ノンブロッキング
I/O は無効になります。 |
| FIOGNBIO | | このコマンドをサポートしているキャラクタ デバイスファイルに対して、
ノンブロッキング I/O が有効になっていれば、1 をセットします。無効であれば、アドレスが arg である整数に 0 をセットします。 |
警告
FIOSSAIOSTAT は、4.2 BSD の FIOASYNC と類似していますが、セキュリティ機能が追加されています。 FIOGSAIOSTAT は
HP が開発したもので、 FIOSSAIOSTAT と対になっています。
これにより BSD スタイルのジョブコントロールを行うために、 システムの非同期の
I/O TTY の状態を、セーブし、復元することができます。 FIOSSAIOOWN は、4.2
BSD の FIOSETOWN と類似していますが、セキュリティ機能を追加されています。 FIOGSAIOOWN は、4.2
BSD の FIOGETOWN と類似しています。 4.2 BSD のこの機能は、プロセスグループに働くのに対して、
HP-UX のバージョンはプロセスに対して働くことに注意してください。 FIOSNBIO は、
AT&T の O_NDELAY open および fcntl のフラグを妨害しないという点を除けば、 4.2 BSD の FIONBIO と同じです。 FIOGNBIO は、
HP が開発したもので、 FIOSNBIO と対になっています。
これにより BSD スタイルのジョブコントロールを行うために、 システムのノンブロッキング
I/O TTY の状態を、セーブし、復元することができます。
参照
ioctl(2)、 socket(7)、 arp(7)
このマニュアルのセクション 7