与中断和内存不同,使用一个没有申请的I/O端口不会使CPU产生异常,也就不会导致诸如“segment ation fault"一类的错误发生。任何进程都可以访问任何一个I/O端口。此时系统无法保证对I/O端口的操作不会发生冲突,甚至会因此而使系统崩溃。因此,在使用I/O端口前,也应该检查此I/O端口是否已有别的程序在使用,若没有,再把此端口标记为正在使用,在使用完以后释放它。 这样需要用到如下几个函数: int check_region (unsigned int start,unsigned long n);
void request_region (unsigned int start,unsigned long n); void release_region (unsigned int start,unsigned long n);
调用这些函数时的参数为:start表示所申请的I/O端口的起始地址;n为所要申请的从from开始的端口数; check_region返回0表示I/O端口空闲,否则为正在被使用。 request_region申请I/O端口使用完成后,使用release_region 函数将他们归还给系统。 在申请了I/O端口之后,就可以如下几个函数来访问I/O端口: #include inline unsigned int inb(unsigned short port); inline unsigned int inb_p(unsigned short port); inline void outb(char value,unsigned shortport); inline void outb_p(char value,unsigned short port); 其中inb_p和outb_p插入了一定的延时以适应某些慢的I/O端口。