next up previous
次へ: アプリケーションの作成 上へ: システムコールの実行(ioctl) 戻る: システムコールの実行(ioctl)

コマンドの使用例

最初にioctlのコマンドと引数構造体を定義したヘッダファイルは、次のように インクルードしておく。

      #include "dio_ioctl.h"

リセットコマンド(DIO_RESET)を実行するときは、ファイルデスクリプタ とそのコマンド番号だけを引数に指定してioctlを実行する。実行に失敗した場 合には戻り値が負になる。
   ret = ioctl(fd, IOCTL_DIO_RESET);
   if (ret < 0) 
       printf("[ioctl reset] no Shippai = %d\n", ret);

ランダム入力のコマンド(DIO_INPUT)を実行するときは、 あらかじめDIO_POINT構造体型の変数を使って入力開始点と入力点数を設定し ておいてからioctlを実行する。そのときのioctlの第3引数には DIO_POINT構造体型の変数のアドレスを指定する。
    DIO_POINT point;

    point.start_point = 3;
    point.data_count = 14;

    ret = ioctl(fd, IOCTL_DIO_INPUT, &point);
    if (ret < 0) 
       printf("[ioctl input] no Machigai = %d\n", ret);

ランダム出力のコマンド(DIO_OUTPUT)を実行するときは、出力に指定し たデータ点数分のデータを、あらかじめデータ配列に格納しておく。
    DIO_POINT point;

    point.start_point = 15;
    point.data_count = 4;

    point.data[0] = 1;
    point.data[1] = 0;
    point.data[2] = 1;
    point.data[3] = 0;

    ret = ioctl(fd, IOCTL_DIO_OUTPUT, &point);
    if (ret < 0) 
       printf("[ioctl output] no Machigai = %d\n", ret);

L.D.D.3の「6.1 ioctl」で注意しているように、このioctlシステム コールに限っては、第3引数に指定するデータは実行時に全くチェックされない。 コマンド番号のマクロに引数型の指定をしているが、実際にはioctlの実 行時に異なる引数を指定しても全くチェックされない。これは、多様なデバイス に対応するためにやむをえないことであると考えられる。



MANOME Yoichi 平成19年1月6日