Scroll to navigation

IOPL(2) Руководство программиста Linux IOPL(2)

ИМЯ

iopl - меняет уровень привилегий ввода-вывода

ОБЗОР

#include <sys/io.h>

int iopl(int level);

ОПИСАНИЕ

iopl() изменяет уровень привилегий ввода/вывода вызывающего процесса на значение level.

Этот вызов необходим для того, чтобы 8514-совместимые X-серверы могли работать под управлением Linux. Этим X-серверам необходим доступ ко всем 65536-и портам ввода/вывода, вызова ioperm(2) для этого недостаточно.

В дополнение к неограниченному доступу к портам ввода-вывода работа на высоком уровне привилегий также позволяет процессу отключать прерывания. Скорее всего, это приведет к сбою системы, поэтому использование этой возможности не рекомендуется.

Эти права наследуются через fork(2) и execve(2).

Уровень привилегий ввода/вывода обычного процесса равен 0.

Данный вызов, в основном, предназначен для архитектуры i386. На большинстве других архитектур он не существует или будет возвращать ошибку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Значение level больше 3.
Этот вызов не реализован.
У вызывающего процесса недостаточно прав вызвать iopl(); для этого требуется мандат CAP_SYS_RAWIO.

СООТВЕТСТВИЕ СТАНДАРТАМ

Вызов iopl() есть только в Linux. Не рекомендуется использовать её в программах, переносимых на другие системы.

ЗАМЕЧАНИЯ

В libc5 данный вызов считается системным и имеет прототип в <unistd.h>. В glibc1 этого прототипа нет. В glibc2 в <sys/io.h> и в <sys/perm.h> этот прототип есть. Не используйте последний вариант, он существует только для i386.

СМОТРИТЕ ТАКЖЕ

ioperm(2), capabilities(7)

2004-05-27 Linux