Linux x86_64E/S assíncrona & eventos#289
signalfd4
Como signalfd, mas aceita flags para criar o descritor já com SFD_CLOEXEC/SFD_NONBLOCK.
Descrição
Evita a condição de corrida de aplicar essas flags separadamente com `fcntl` após `signalfd`.
Header:
sys/signalfd.hman 2Desde o kernel 2.6.27Assinatura
int signalfd4(int fd, const sigset_t * mask, size_t sizemask, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | -1 para criar, ou um signalfd existente para reconfigurar. |
| mask | const sigset_t * | Conjunto de sinais a capturar. |
| sizemask | size_t | Tamanho de `mask` em bytes. |
| flags | int | 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 | sizemasksize_t |
| r10 | argumento 4 | 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.