Voltar à lista
Linux x86_64Dispositivos & ioctl#16

ioctl

Executa uma operação de controle específica de dispositivo ou driver sobre um descritor de arquivo.

Descrição

`ioctl` é a válvula de escape do modelo 'tudo é um arquivo' do Linux: quando uma operação não se encaixa em read/write/lseek, drivers de dispositivo, sistemas de arquivos, sockets e subsistemas do kernel expõem comandos numéricos próprios através dela. O significado de `request` e do terceiro argumento é inteiramente definido por quem implementa o `fd` — não existe uma semântica genérica.

Header: sys/ioctl.hman 2

Atenção

Não existe validação de tipos entre `request` e `argp` feita pelo kernel de forma genérica — usar a struct errada para um `request` é undefined behavior e uma fonte histórica comum de vulnerabilidades.

Assinatura

int ioctl(int fd, unsigned long request, ... argp);

Parâmetros

ParâmetroTipoDescrição
fdintDescritor de arquivo (dispositivo, socket, terminal, etc.) que suporta a operação.
requestunsigned longCódigo do comando, definido pelo driver/subsistema (ex.: TCGETS, FIONREAD, SIOCGIFCONF).
argp...Terceiro argumento opcional e de tipo variável — tipicamente um ponteiro para uma estrutura específica do `request`; presença e tipo dependem inteiramente do comando.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1fdint
rsiargumento 2requestunsigned long
rdxargumento 3argp...

Valor de retorno

Normalmente 0 em sucesso. Alguns comandos retornam um valor não negativo com significado próprio (por convenção do driver). -1 em erro, com errno definido.

Códigos de erro (errno)

EBADF(9)
Descritor de arquivo inválido.
ENOTTY(25)
Operação de controle inapropriada para o dispositivo (não é um terminal).
EFAULT(14)
Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
EINVAL(22)
Argumento inválido.

Relacionadas

Equivalente em Windows Win32

Mesma categoria