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が消えれば完全に成功である。