Voltar à lista
Linux x86_64E/S assíncrona & eventos#270

pselect6

Como select, mas com resolução de nanossegundos no timeout e substituição atômica da máscara de sinais durante a espera.

Descrição

Resolve a mesma condição de corrida que `rt_sigsuspend` resolve para `pause`: desbloquear um sinal e começar a esperar deixa de ser duas operações separadas.

man 2Desde o kernel 2.6.16

Assinatura

int pselect6(
    int nfds,
    fd_set * readfds,
    fd_set * writefds,
    fd_set * exceptfds,
    const struct timespec * timeout,
    const sigset_t * sigmask
);

Parâmetros

ParâmetroTipoDescrição
nfdsintUm a mais que o maior descritor presente nos 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 exceções.
timeoutconst struct timespec *Tempo máximo de espera; NULL bloqueia indefinidamente.
sigmaskconst sigset_t *Máscara de sinais a usar atomicamente durante a espera.

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 5timeoutconst struct timespec *
r9argumento 6sigmaskconst sigset_t *

Valor de retorno

Número de descritores prontos 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