ioperm -
ポートの入出力許可を設定する
#include <unistd.h> /* for libc5 */
#include <sys/io.h> /* for glibc */
int ioperm(unsigned long from, unsigned long num,
int turn_on);
ioperm() は、引き数
from の
I/O ポートアドレスから
num
ビット分の領域に対する、呼び出し元スレッドのアクセス許可ビットを設定する。
turn_on が 0
以外の場合、指定されたビットに対応する許可が有効になる。
turn_on が 0
以外の場合、呼び出し元プロセスは特権
(
CAP_SYS_RAWIO)
を持っていなければならない。
Linux 2.6.8
より前のバージョンでは、この方法で設定できるのは
0x3ff 番地までの
I/Oポートに限られていた。これよりも大きなアドレスのポートに対しては
iopl(2)
関数を使わなければならなかった。Linux
2.6.8 以降では、65,536 個の I/O
ポートを指定できる。
アクセス権は
fork(2)
で作成された子プロセスには継承されない。子プロセスでは、
fork(2)
の後で必要なアクセス権を有効にしなければならない。
execve(2)
の前後でアクセス権は保存される。この機能は
非特権プログラムにポートへのアクセス権を
与えるのに使用できる。
このシステムコールはほとんど
i386
アーキテクチャのためだけのものである。
その他の多くのアーキテクチャでは存在しないか、常にエラーを返す。
返り値¶
成功した場合は 0
が返される。エラーの場合は
-1 が返され、
errno
が適切に設定される。
エラー¶
- EINVAL
- from または num
の値が不正である。
- EIO
- (PowerPC で)
このシステムコールはサポートしていない。
- ENOMEM
- メモリ不足。
- EPERM
- 呼び出し元スレッドに十分な権限がなかった。
ioperm() は Linux
特有の関数であり、移植を意図したプログラムで
使用してはならない。
/proc/ioports
ファイルには、現在このシステムに割り当てられている
I/O
ポートが表示される。
libc5
ではシステムコールとして扱い
<unistd.h>
にプロトタイプが存在している。
glibc1
にはプロトタイプは存在しない。
glibc2 は
<sys/io.h> と
<sys/perm.h>
の両方にプロトタイプを持っている。
後者は i386
のみで利用可能なので、使用すべきではない。
関連項目¶
iopl(2),
outb(2),
capabilities(7)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。