IOPERM(2)

ИМЯ
ioperm - устанавливает права на работу с портами ввода/вывода

ОБЗОР
#include <unistd.h> /* для libc5 */
#include <sys/io.h> /* для glibc */

int ioperm(unsigned long from, unsigned long num, int turn_on);

ОПИСАНИЕ
ioperm() устанавливает биты прав доступа вызывающего процесса к порту ввода-вывода num, начиная с адреса порта from до значения turn_on. Если turn_on не равно 0, вызывающий процесс должен быть привилегированным (CAP_SYS_RAWIO). Можно задать права доступа только к первым 0x3ff портам ввода-вывода. Для работы с другими портами необходимо использовать системный вызов iopl(2). Права не наследуются при вызове fork(2); права сохраняются при вызове execve(2); это можно использовать для предоставления доступа к портам ввода-вывода непривилегированным программам. Данный вызов, в основном, предназначен для архитектуры i386. На большинстве других архитектур он не существует или будет возвращать ошибку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

EINVAL
    Неверные значения from или num.

EIO (на PowerPC) Этот системный вызов не поддерживается.

ENOMEM
    Не хватает памяти.

EPERM
    Вызывающий процесс не имеет достаточно прав.

СООТВЕТСТВИЕ СТАНДАРТАМ
Вызов ioperm() есть только в Linux. Он не должен использоваться в переносимых программах.

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

СМОТРИТЕ ТАКЖЕ
iopl(2), capabilities(7)