NOME¶
iopl - altera o nível de privilégio de E/S
SINOPSE¶
#include <unistd.h> /* for libc5 */
#include <sys/io.h> /* for glibc */
int iopl(int level);
DESCRIÇÃO¶
iopl altera o nível de privilégio de E/S de um processo aatual,
como especificado em
level.
Esta chamada é necessária para permitir a compatibilidade que
servidores X 8514 rodem no Linux. Desde então estes servidores X acessam
todas as portas de E/S do 65536, a chamada
ioperm não foi
suficiente.
Em adição a concessão de acesso as portas de E/S irrestrito,
rodando em um alto nível de privilégio de E/S também permite ao
processo desabilitar interrupções. Isto irá provavelmente
derrubar o sistema, e não é recomendado.
Permissões são herdadas através de fork e exec.
O nível de privilégio de E/S para um processo normal é 0.
VALORES RETORNADOS¶
Em caso de sucesso, zero é retornado. Caso contrário, -1 é
retornado, e
errno é selecionado adequamente.
ERROS¶
- EINVAL
- level é maior que 3.
- EPERM
- O usuário autal não é o
superusuário.
NOTAS VINDAS DO FONTE DO KERNEL¶
iopl ela tem que ser usada quando você procura acessar as portas de
E/S além do intervalo 0x3ff: para obter o mapa de bits completo do 65536
você precisaria de 8kB de mapa de bits/processo,o que é um excesso
de bits.
DE ACORDO COM¶
iopl é específica do Linux e não deveria ser usada em
processos que pretendem ser portáveis.
NOTAS¶
Libc5 trata com uma chamada de sistema e tem um tipo primitivo em
<unistd.h>. Glibc1 não tem um tipo primitivo. Glibc2 tem um
tipo primitivo em
<sys/io.h> e em
<sys/perm.h>.
Evitar o segundo, ele está disponível somente nos i386.
VEJA TAMBÉM¶
ioperm(2)