next up previous
次へ: ioctlのRESETのライブラリ化 上へ: Application Program Interface 戻る: 実験11の例題

openのライブラリ化

もし、次に示すアプリケーションのopen処理を
   fd = open("/dev/pci2726c", O_RDWR);
   if (fd < 0){
      printf("[open] no Shippai.\n");
      return -errno;
   }
つぎのような名前の関数
 int DioOpen(void);
としてライブラりに登録できれば、アプリケーションは次のようになる。
/* 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 = DioOpen();  // ライブラリ

   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;
}

自分のライブラリに登録する関数の名前と引数は自由である。
ここでは、とりあえず名前をDioOpenとして引数の数をゼロにした。
なお、この名前は「PCIバスによるI/O制御」の203ページや210ページを参考にした。



MANOME Yoichi 平成18年12月26日