ОБЗОР
#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 устанавливается в соответствующее значение.ОШИБКИ
- EINVAL
- Значение level больше 3.
- ENOSYS
- Этот вызов не реализован.
- EPERM
- У вызывающего процесса недостаточно прав вызвать iopl(); для повышения уровня привилегий ввода-вывода выше текущего значения требуется мандат CAP_SYS_RAWIO.