Linux x86_64E/S assíncrona & eventos#290
eventfd2
Como eventfd, mas aceita flags para EFD_CLOEXEC, EFD_NONBLOCK e EFD_SEMAPHORE.
Descrição
EFD_SEMAPHORE altera a semântica de leitura: em vez de zerar o contador inteiro, cada leitura decrementa em 1, tornando o eventfd utilizável diretamente como um semáforo.
Header:
sys/eventfd.hman 2Desde o kernel 2.6.27Assinatura
int eventfd2(unsigned int initval, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| initval | unsigned int | Valor inicial do contador. |
| flags | int | EFD_CLOEXEC, EFD_NONBLOCK, EFD_SEMAPHORE. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | initvalunsigned int |
| rsi | argumento 2 | flagsint |
Valor de retorno
Um descritor eventfd em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENODEV(19)
- Dispositivo inexistente.
- ENOMEM(12)
- Memória insuficiente para completar a operação.