Linux x86_64E/S assíncrona & eventos#7
poll
Aguarda até que um ou mais descritores de arquivo de um conjunto fiquem prontos para E/S.
Descrição
Generalização mais moderna e sem o limite de 1024 descritores de `select`: cada descritor é associado a uma máscara de eventos de interesse (POLLIN, POLLOUT, etc.) em uma struct própria, em vez de bitmaps de tamanho fixo.
Header:
poll.hman 2Assinatura
int poll(struct pollfd * fds, nfds_t nfds, int timeout);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fds | struct pollfd * | Array de descritores e eventos de interesse; preenchido com os eventos ocorridos na saída. |
| nfds | nfds_t | Número de elementos em `fds`. |
| timeout | int | Tempo máximo de espera em milissegundos; -1 bloqueia indefinidamente, 0 retorna imediatamente. |
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 | timeoutint |
Valor de retorno
Número de descritores com eventos pendentes (0 em timeout) 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.