Linux x86_64E/S assíncrona & eventos#23Depreciada
select
Aguarda até que um ou mais descritores de um conjunto fiquem prontos para leitura, escrita, ou sinalizem exceção.
Descrição
A API de multiplexação de I/O mais antiga do Unix; limitada a FD_SETSIZE descritores (tipicamente 1024) e com custo O(n) por chamada — em código novo, prefira `poll`/`epoll`.
Header:
sys/select.hman 2Depreciada
Prefira `poll` ou `epoll` em código novo: evita o limite de FD_SETSIZE e o custo de reconstruir os bitmaps a cada chamada.
Assinatura
int select(
int nfds,
fd_set * readfds,
fd_set * writefds,
fd_set * exceptfds,
struct timeval * timeout
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| nfds | int | Um a mais que o maior número de descritor presente em qualquer um dos conjuntos. |
| readfds | fd_set * | Conjunto de descritores a observar para leitura. |
| writefds | fd_set * | Conjunto de descritores a observar para escrita. |
| exceptfds | fd_set * | Conjunto de descritores a observar para condições excepcionais. |
| timeout | struct timeval * | Tempo máximo de espera; NULL bloqueia indefinidamente. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | nfdsint |
| rsi | argumento 2 | readfdsfd_set * |
| rdx | argumento 3 | writefdsfd_set * |
| r10 | argumento 4 | exceptfdsfd_set * |
| r8 | argumento 5 | timeoutstruct timeval * |
Valor de retorno
Número total de descritores prontos (0 em timeout) em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
Relacionadas
Equivalente em Windows Win32