これは、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 おわり */ |