Voltar à lista
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 2

Depreciada

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âmetroTipoDescrição
nfdsintUm a mais que o maior número de descritor presente em qualquer um dos conjuntos.
readfdsfd_set *Conjunto de descritores a observar para leitura.
writefdsfd_set *Conjunto de descritores a observar para escrita.
exceptfdsfd_set *Conjunto de descritores a observar para condições excepcionais.
timeoutstruct timeval *Tempo máximo de espera; NULL bloqueia indefinidamente.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1nfdsint
rsiargumento 2readfdsfd_set *
rdxargumento 3writefdsfd_set *
r10argumento 4exceptfdsfd_set *
r8argumento 5timeoutstruct 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