IOPL(2)

名前
iopl - I/O特権レベルの変更

書式
#include <unistd.h>

int iopl(int level);

説明
iopl は現在のプロセスのI/O特権レベルを引数 level で指定したものに変更する。 この関数は、8514互換のXサーバをLinuxで動作させるために必要である。 これらのXサーバは、65536あるI/Oポート全てへのアクセスを要求し、 ioperm 関数だけでは不十分であるからである。 I/Oポートアクセスの制限を解除することに加えて、 より高いI/O特権レベルでの動作をさせプロセスが割り込みを無効化することを許す。 これは、時としてシステムの破壊をもたらすので、あまり勧められない。 通常のプロセスのI/O特権レベルは0である。

返り値
成功した場合には、0を返す。エラーの場合には、-1を返す。 そして、 errno に値が設定される。

エラー

EINVAL
    引数 level が3より大きい。

EPERM
    現ユーザがスーパーユーザではない。

カーネル・ソースよりの注意
iopl
 は、0x3ff番地までのI/Oポートアドレスを越えてアクセスしたい場合に用る。 ビットマップ化された65536のI/Oポートを使用する場合などである。 (ioperm で) 65536 のポートを全てをビットマップを使用して アクセス制御するためにはプロセスごとに 8kB のビットマップを必要とする。 これは極端すぎる。

関連項目
ioperm(2)