sub-rotina sigthreadmask

Propósito

Configura a máscara de sinal de um fio.

Biblioteca

Biblioteca de encadeamentos (libpthreads.a)

Sintaxe

#include <pthread.h>
#include <signal.h>
int sigthreadmask( how,  set,  old_set)
int how;
const sigset_t *set;
sigset_t *old_set;

Descrição

A subroutine sigthreadmask é usada para examinar ou alterar a máscara de sinal do fio de chamada. A subroutina sigprocmask não deve ser usada em um processo multi-encadeado.

Geralmente, a subroutina sigthreadmask (SIG_BLOCK) é usada para bloquear sinais durante uma seção crítica de código. A subroutine sigthreadmask (SIG_SETMASK) é então usada para restaurar a máscara para o valor anterior devolvido pelo subroutine sigthreadmask (SIG_BLOCK) .

Se houver quaisquer sinais não bloqueados pendentes após a chamada para a subroutine sigthreadmask , pelo menos um desses sinais será entregue antes que o subroutine sigthreadmask retorna.

A subroutine sigthreadmask não permite que o sinal SIGKILL ou SIGSTOP seja bloqueado. Se um programa tentar bloquear qualquer sinal, a subroutine sigthreadmask não dá nenhuma indicação sobre o erro.

Nota: O arquivo de cabeçalho pthread.h deve ser o primeiro arquivo incluído de cada arquivo de origem usando a biblioteca de encadeamentos.

Parâmetros

Item Descrição
como Indica a maneira como o conjunto é alterado. Pode ter um dos valores a seguir:
SIG_BLOQUEIO
O conjunto resultante é a união do conjunto atual e o conjunto de sinal apontado pelo parâmetro set .
SIG_UNBLOCK
O conjunto resultante é a interseção do conjunto atual e o complemento do conjunto de sinal apontado pelo parâmetro set .
SIG_SETMASK
O conjunto resultante é o conjunto de sinal apontado pelo parâmetro set .
configurar Especifica o conjunto de sinal. Se o valor do parâmetro Set não for nulo, ele aponta para um conjunto de sinais a serem usados para alterar o conjunto atualmente bloqueado. Se o valor do parâmetro Set for nulo, o valor do parâmetro How não é significativo e a máscara de sinal do processo fica inalterada. Assim, a chamada pode ser usada para indagar sobre sinais bloqueados atualmente.
conjunto_antigo Se o parâmetro old_set não for o valor nulo, a máscara de sinal em vigor no momento da chamada será armazenada no espaçamento apontado pelo parâmetro old_set .

Valores De Retorno

Após a conclusão, um valor de 0 é devolvido. Se a sub-rotina sigthreadmask falhar, a máscara de sinal do processo permanecerá inalterada, um valor de -1 será retornado e a variável global errno será definida para indicar o erro.

Códigos De Erro

A subroutine sigthreadmask não é bem-sucedida se o seguinte for verdadeiro:

Item Descrição
EFAULT Os ponteiros set ou old_set não estão no espaço de endereço do processo.
EINVAL O valor do parâmetro como não é suportado.
EPERM O encadeamento de chamada não tem o privilégio de alterar a máscara do sinal.

Exemplos

Para configurar a máscara de sinal para bloquear apenas o sinal SIGINT da entrega, digite:

#include <pthread.h>
#include <signal.h>
 
int return_value;
sigset_t newset;
sigset_t *newset_p;
 . . .
newset_p = &newset;
sigemptyset(newset_p);
sigaddset(newset_p, SIGINT);
return_value = sigthreadmask(SIG_SETMASK, newset_p, NULL);