9. プログラムの例

これは、I/O ポートアクセスの単純なコーディング例です:

/*
 * example.c: とっても簡単なポートI/Oの例
 *
 * なにも役にたつことはしていません。ポートに書き込み、一時停止して、
 * ポートから読み出すだけです。「gcc -O2 -o example example.c」で
 * コンパイルして、ルートユーザになって「./example」で実行してください。
 */

#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>

#define BASEPORT 0x378 /* lp1 */

int main()
{
  /* ポートへのアクセス許可を得る */
  if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
  
  /* ポートのデータ (D0-D7)を全て low (0) にする */
  outb(0, BASEPORT);
  
  /* しばらくの間 (100 ms) スリープ */
  usleep(100000);
  
  /* ステータスポート (BASE+1) から読み出して、表示する */
  printf("status: %d\n", inb(BASEPORT + 1));

  /* もうポートを使わないので後始末 */
  if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}

  exit(0);
}

/* example.c おわり */