Scroll to navigation

IOPERM(2) Руководство программиста Linux 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 устанавливается в соответствующее значение.

ОШИБКИ

Неверные значения from или num.
(на PowerPC) Этот системный вызов не поддерживается.
Не хватает памяти.
Вызывающий процесс не имеет достаточно прав.

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

Вызов ioperm() есть только в Linux. Он не должен использоваться в переносимых программах.

ЗАМЕЧАНИЯ

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

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

iopl(2), capabilities(7)

2007-06-15 Linux