iopl - システムコールの説明 - Linux コマンド集 一覧表
名前
iopl - I/O 特権レベルを変更する
書式
#include <sys/io.h>
int iopl(int
level
);
説明
iopl
()はこのプロセスの I/O 特権レベルを
level
で指定した値に変更する。
この関数は 8514 互換の X サーバを Linux で動作させるために必要である。
なぜならこの X サーバは 65536 個の I/O ポート全てへのアクセスを要求するので
ioperm
()関数では不十分だからである。
より高い I/O 特権レベルでの動作をさせることによって
I/O ポートアクセスの制限を解除することに加えて、プロセスが割り込みを
無効にすることもできるようになる。この機能は時としてシステムの破壊を
もたらすので勧められない。
fork
()や
exec
()を行った場合、特権は継承される。
通常のプロセスの I/O 特権レベルは 0 である。
このシステムコールはほとんど i386 アーキテクチャのためだけのものである。
その他の多くのアーキテクチャでは存在しないか、常にエラーを返す。
返り値
成功した場合には 0 を返す。エラーの場合には -1 を返し、 errno に適切な値が設定される。
エラー
- EINVAL
- 引き数 level が 3 より大きい。
- ENOSYS
- このシステムコールは実装されていない。 呼び出し元プロセスに iopl ()を呼び出すのに十分な権限がなかった。 iopl ()を呼び出すには CAP_SYS_RAWIO ケーパビリティが必要である。
準拠
iopl () は Linux 特有の関数であり、移植を意図したプログラムで 使用してはならない。
注意
libc5 ではシステムコールとして扱い <unistd.h> にプロトタイプが存在している。 glibc1 にはプロトタイプは存在していない。 glibc2 は <sys/io.h> と <sys/perm.h> の両方にプロトタイプを持っている。 後者は i386 のみで利用可能なので、使用すべきではない。