IOPL(2) |
Linux Programmer's Manual |
IOPL(2) |
名前
iopl - I/O 特権レベルを変更する
書式
#include <sys/io.h>
int iopl(int
level
);
説明
iopl() changes the I/O privilege level of the calling process, as specified by the two least significant bits in
level.
この関数は 8514 互換の X サーバを Linux で動作させるために必要である。なぜならこの X サーバは 65536 個の I/O ポート全てへのアクセスを要求するので
ioperm(2) 関数では不十分だからである。
より高い I/O 特権レベルでの動作をさせることによって I/O ポートアクセスの制限を解除することに加えて、プロセスが割り込みを無効にすることもできるようになる。この機能は時としてシステムの破壊をもたらすので勧められない。
fork(2) や
exec(2) を行った場合、特権は継承される。
通常のプロセスの I/O 特権レベルは 0 である。
このシステムコールはほとんど i386 アーキテクチャのためだけのものである。その他の多くのアーキテクチャでは存在しないか、常にエラーを返す。
返り値
成功した場合は 0 が返される。エラーの場合は-1 が返され、
errno が適切に設定される。
エラー
-
EINVAL
-
引き数
level が 3 より大きい。
-
ENOSYS
-
このシステムコールは実装されていない。
-
EPERM
-
The calling process has insufficient privilege to call
iopl(); the
CAP_SYS_RAWIO capability is required to raise the I/O privilege level above its current value.
準拠
ipc() は Linux 特有であり、移植を意図したプログラムでは使用してはいけない。
注意
libc5 ではシステムコールとして扱い
<unistd.h> にプロトタイプが存在している。 glibc1 にはプロトタイプは存在していない。 glibc2 は
<sys/io.h> と
<sys/perm.h> の両方にプロトタイプを持っている。後者は i386 のみで利用可能なので、使用すべきではない。
関連項目
ioperm(2),
outb(2),
capabilities(7)
この文書について
この man ページは Linux
man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。