#include <sys/io.h> unsigned char inb(unsigned short port); unsigned char inb_p(unsigned short port); unsigned short inw(unsigned short port); unsigned short inw_p(unsigned short port); unsigned int inl(unsigned short port); unsigned int inl_p(unsigned short port); void outb(unsigned char value, unsigned short port); void outb_p(unsigned char value, unsigned short port); void outw(unsigned short value, unsigned short port); void outw_p(unsigned short value, unsigned short port); void outl(unsigned int value, unsigned short port); void outl_p(unsigned int value, unsigned short port); void insb(unsigned short port, void *addr, unsigned long count); void insw(unsigned short port, void *addr, unsigned long count); void insl(unsigned short port, void *addr, unsigned long count); void outsb(unsigned short port, const void *addr, unsigned long count); void outsw(unsigned short port, const void *addr, unsigned long count); void outsl(unsigned short port, const void *addr, unsigned long count);
これらの関数はもともとカーネル内部での使用を想定して設計されているが、 ユーザー空間からでも使用できる。
-O や -O2 などを指定してコンパイルしなければならない。 これらの関数はインラインマクロとして定義されており、 最適化を行わないと関数の展開が行われず、 リンクの時に「解決できない参照(unresolved reference)」が発生する。
ユーザー空間のアプリケーションが I/O ポートにアクセスすることを カーネルに教えるために ioperm(2) もしくは iopl(2) を使用すること。これを忘れるとアプリケーションはセグメンテーション違反 (segmentation fault) を受けとることになる。