ioctlシステムコールをテストするためのアプリケーションを作成する。
ランダムな場所からランダムな数にデータを入力し、ランダムな場所へ出力する
テストプログラムを考える。
具体的な仕様としては、IN1のデータを入力してOUT32へ出力する。
実験装置のCHK-2101の上では、接点番号1の入力スイッチのデータを接点番号64
のLEDへ出力することになる。(以後、接点番号を接点と略す。)
CHK-2101の接点1〜接点32はIN1〜IN32に対応している。
そして接点33〜接点64はOUT1〜OUT32に対応している。
以下のコードを記述し、dio_tst.c
というソースファイルにする。
/* InfoSysLab11 example-1 */ #include <stdio.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include "dio_ioctl.h" int main(void) { int fd, i, ret; DIO_POINT point; fd = open("/dev/pci2726c", O_RDWR); if (fd < 0){ printf("[open] no Shippai.\n"); return -errno; } ret = ioctl(fd, IOCTL_DIO_RESET); if (ret < 0) printf("[ioctl reset] no Machigai = %d\n", ret); point.start_point = 1; point.data_count = 1; ret = ioctl(fd, IOCTL_DIO_INPUT, &point); if (ret < 0) printf("[ioctl input] no Machigai = %d\n", ret); point.start_point = 32; point.data_count = 1; ret = ioctl(fd, IOCTL_DIO_OUTPUT, &point); if (ret < 0) printf("[ioctl output] no Machigai = %d\n", ret); close(fd); return 0; }
最初にテストプログラムdio_tst.c
を次のようにコンパイルする。
# make
コンパイルでエラーが出なければ、実行可能イメージとしてのdio_tst
ア
プリケーションが生成されているので、念のためls
コマンドで確かめる
こと。
実験装置CHK-2101の接点スイッチを全てOFFにする。
接点1のスイッチだけをONにする。
次のように
# ./dio_tst
を実行して、接点64のLEDだけがが点灯すれば成功であるが、念ため 接点1のスイッチをOFFにする。
そして、再びdio_tst
を実行して、接点64のLEDが消えれば完全に成功である。