Manpages

名 前

outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_p, inw_p, inl_p − ポ ー ト 入 出 力

書 式

#include <sys/io.h>

unsigned char inb(unsigned short int port);
unsigned char inb_p(unsigned short int
port);
unsigned short int inw(unsigned short int
port);
unsigned short int inw_p(unsigned short int
port);
unsigned int inl(unsigned short int
port);
unsigned int inl_p(unsigned short int
port);

void outb(unsigned char value, unsigned short int port);
void outb_p(unsigned char
value, unsigned short int port);
void outw(unsigned short int
value, unsigned short int port);
void outw_p(unsigned short int
value, unsigned short int port);
void outl(unsigned int
value, unsigned short int port);
void outl_p(unsigned int
value, unsigned short int port);

void insb(unsigned short int port, void *addr,
unsigned long int
count);
void insw(unsigned short int
port, void *addr,
unsigned long int
count);
void insl(unsigned short int
port, void *addr,
unsigned long int
count);
void outsb(unsigned short int
port, const void *addr,
unsigned long int
count);
void outsw(unsigned short int
port, const void *addr,
unsigned long int
count);
void outsl(unsigned short int
port, const void *addr,
unsigned long int
count);

説 明

こ の 一 連 の 関 数 は ポ ー ト に 対 す る 低 レ ベ ル の 入 出 力 に 使 用 す る 。 out* 関 数 は ポ ー ト 出 力 、 in* 関 数 は ポ ー ト 入 力 を 行 う 。 語 尾 に b が つ い て い る 関 数 は バ イ ト 単 位 、 w が つ い て い る 関 数 は ワ ー ド 単 位 で あ る 。 _p が つ い て い る 関 数 は I/O が 終 了 す る ま で 待 つ 。 こ れ ら の 関 数 は も と も と カ ー ネ ル 内 部 で の 使 用 を 想 定 し て 設 計 さ れ て い る が 、 ユ ー ザ ー 空 間 か ら で も 使 用 で き る 。

−O−O2 な ど を 指 定 し て コ ン パ イ ル し な け れ ば な ら な い 。 こ れ ら の 関 数 は イ ン ラ イ ン マ ク ロ と し て 定 義 さ れ て お り 、 最 適 化 を 行 わ な い と 関 数 の 展 開 が 行 わ れ ず 、 リ ン ク の 時 に 「 解 決 で き な い 参 照 (unresolved reference)」 が 発 生 す る 。 ユ ー ザ ー 空 間 の ア プ リ ケ ー シ ョ ン が I/O ポ ー ト に ア ク セ ス す る こ と を カ ー ネ ル に 教 え る た め に ioperm(2) も し く は iopl(2) を 使 用 す る こ と 。 こ れ を 忘 れ る と ア プ リ ケ ー シ ョ ン は セ グ メ ン テ ー シ ョ ン 違 反 (segmentation fault) を 受 け と る こ と に な る 。

準 拠

outb() と そ の 仲 間 は ハ ー ド ウ ェ ア 特 有 で あ る 。 value 引 数 が 最 初 に 渡 さ れ 、 port 引 数 が 二 番 目 に 渡 さ れ る 。 こ の 順 序 は ほ と ん ど の DOS で の 実 装 と は 逆 で あ る 。

関 連 項 目

ioperm(2), iopl(2)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。