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.
sys/ioctl.hman 2Atençã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âmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo (dispositivo, socket, terminal, etc.) que suporta a operação. |
| request | unsigned long | Có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)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdint |
| rsi | argumento 2 | requestunsigned long |
| rdx | argumento 3 | argp... |
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