Linux x86_64E/S assíncrona & eventos#271
ppoll
Como poll, mas com resolução de nanossegundos no timeout e substituição atômica da máscara de sinais durante a espera.
Descrição
Análoga de `poll` para `pselect6`.
man 2Desde o kernel 2.6.16
Assinatura
int ppoll(
struct pollfd * fds,
nfds_t nfds,
const struct timespec * tmo_p,
const sigset_t * sigmask
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fds | struct pollfd * | Array de descritores e eventos de interesse. |
| nfds | nfds_t | Número de elementos em `fds`. |
| tmo_p | const struct timespec * | Tempo máximo de espera; NULL bloqueia indefinidamente. |
| sigmask | const sigset_t * | Máscara de sinais a usar atomicamente durante a espera. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdsstruct pollfd * |
| rsi | argumento 2 | nfdsnfds_t |
| rdx | argumento 3 | tmo_pconst struct timespec * |
| r10 | argumento 4 | sigmaskconst sigset_t * |
Valor de retorno
Número de descritores com eventos pendentes em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.