Linux x86_64E/S assíncrona & eventos#206
io_setup
Cria um contexto de I/O assíncrono (AIO) POSIX/Linux, usado pelas syscalls io_submit/io_getevents/io_cancel.
Descrição
Interface de AIO mais antiga do Linux, focada principalmente em I/O de arquivo com O_DIRECT; hoje amplamente superada em flexibilidade e desempenho por `io_uring`.
Header:
linux/aio_abi.hman 2Desde o kernel 2.5Nota
Para I/O assíncrono novo, prefira `io_uring` (io_uring_setup): mais flexível, com throughput maior e suporte a muito mais tipos de operação.
Assinatura
int io_setup(unsigned nr_events, aio_context_t * ctx_idp);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| nr_events | unsigned | Número máximo de eventos concorrentes suportados pelo contexto. |
| ctx_idp | aio_context_t * | Recebe o identificador do novo contexto. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | nr_eventsunsigned |
| rsi | argumento 2 | ctx_idpaio_context_t * |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- ENOSYS(38)
- Chamada de sistema não implementada nesta versão do kernel.