Linux x86_64Sinais#128
rt_sigtimedwait
Aguarda de forma síncrona até que um dos sinais em um conjunto se torne pendente, com timeout opcional.
Descrição
Alternativa a tratar sinais de forma assíncrona via handler: bloqueia os sinais de interesse com `rt_sigprocmask` e então usa esta chamada para 'recebê-los' de forma síncrona e sequencial, o que simplifica muito a lógica de programas orientados a eventos.
man 2
Assinatura
int rt_sigtimedwait(
const sigset_t * set,
siginfo_t * info,
const struct timespec * timeout,
size_t sigsetsize
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| set | const sigset_t * | Conjunto de sinais a aguardar. |
| info | siginfo_t * | Se não for NULL, recebe detalhes sobre o sinal entregue. |
| timeout | const struct timespec * | Tempo máximo de espera; NULL para bloquear indefinidamente. |
| sigsetsize | size_t | Tamanho em bytes de sigset_t. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | setconst sigset_t * |
| rsi | argumento 2 | infosiginfo_t * |
| rdx | argumento 3 | timeoutconst struct timespec * |
| r10 | argumento 4 | sigsetsizesize_t |
Valor de retorno
Número do sinal recebido em sucesso; -1 em erro (incluindo timeout, via EAGAIN), com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).