Linux x86_64E/S assíncrona & eventos#282
signalfd
Cria (ou reconfigura) um descritor de arquivo que recebe sinais como eventos legíveis, em vez de via tratador assíncrono.
Descrição
Permite tratar sinais dentro de um loop de eventos baseado em epoll/poll junto com sockets e outros descritores, unificando o modelo de programação em vez de misturar handlers assíncronos com o resto da lógica.
Header:
sys/signalfd.hman 2Desde o kernel 2.6.22Atenção
Os sinais em `mask` também devem ser bloqueados com `rt_sigprocmask` para que não sejam entregues da forma tradicional em paralelo.
Assinatura
int signalfd(int fd, const sigset_t * mask, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | -1 para criar um novo descritor, ou um signalfd existente para reconfigurar. |
| mask | const sigset_t * | Conjunto de sinais a capturar através deste descritor. |
| flags | int | Nesta versão original, sem efeito — ver signalfd4 para SFD_CLOEXEC/SFD_NONBLOCK. |
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 | maskconst sigset_t * |
| rdx | argumento 3 | flagsint |
Valor de retorno
Um descritor signalfd em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.