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

signalfd

Cria (ou reconfigura) um descritor de arquivo que recebe sinais como eventos legíveis, em vez de via tratador assíncrono.

Descrição

Permite tratar sinais dentro de um loop de eventos baseado em epoll/poll junto com sockets e outros descritores, unificando o modelo de programação em vez de misturar handlers assíncronos com o resto da lógica.

Header: sys/signalfd.hman 2Desde o kernel 2.6.22

Atenção

Os sinais em `mask` também devem ser bloqueados com `rt_sigprocmask` para que não sejam entregues da forma tradicional em paralelo.

Assinatura

int signalfd(int fd, const sigset_t * mask, int flags);

Parâmetros

ParâmetroTipoDescrição
fdint-1 para criar um novo descritor, ou um signalfd existente para reconfigurar.
maskconst sigset_t *Conjunto de sinais a capturar através deste descritor.
flagsintNesta versão original, sem efeito — ver signalfd4 para SFD_CLOEXEC/SFD_NONBLOCK.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1fdint
rsiargumento 2maskconst sigset_t *
rdxargumento 3flagsint

Valor de retorno

Um descritor signalfd em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EBADF(9)
Descritor de arquivo inválido.
EINVAL(22)
Argumento inválido.
EMFILE(24)
Limite de arquivos abertos do processo atingido.
ENOMEM(12)
Memória insuficiente para completar a operação.

Relacionadas