Linux x86_64E/S assíncrona & eventos#233
epoll_ctl
Adiciona, modifica ou remove a inscrição de um descritor de arquivo em uma instância epoll.
Descrição
Registrar um descritor uma única vez (em vez de repassar a lista inteira a cada chamada, como select/poll) é o que dá a epoll sua escalabilidade.
Header:
sys/epoll.hman 2Assinatura
int epoll_ctl(int epfd, int op, int fd, struct epoll_event * event);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| epfd | int | Descritor da instância epoll. |
| op | int | EPOLL_CTL_ADD, EPOLL_CTL_MOD ou EPOLL_CTL_DEL. |
| fd | int | Descritor a registrar/alterar/remover. |
| event | struct epoll_event * | Eventos de interesse e dado associado (ignorado para EPOLL_CTL_DEL). |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | epfdint |
| rsi | argumento 2 | opint |
| rdx | argumento 3 | fdint |
| r10 | argumento 4 | eventstruct epoll_event * |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EEXIST(17)
- Arquivo já existe.
- EINVAL(22)
- Argumento inválido.
- ENOENT(2)
- Arquivo ou diretório inexistente.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- ENOSPC(28)
- Sem espaço livre no dispositivo.
- EPERM(1)
- Operação não permitida (falta de privilégio).