Scroll to navigation

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 が適切に設定される。

エラー

引き数 level が 3 より大きい。
このシステムコールは実装されていない。
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/ に書かれている。

2013-03-15 Linux