C Uso da função sigaction

C Uso da função sigaction
A Sigaction () é uma função que permite chamar/observar ou examinar uma ação específica associada a um sinal específico. Pensa -se que considere uma função de sinal e sigação na mesma página. Mas, na realidade, não ocorreu. A função Signal () não bloqueia outros sinais quando a execução do treinador atual está em processo. Ao mesmo tempo, a função Sigaction pode bloquear outros sinais até que o manipulador atual retorne.

Sintaxe

#incluir
# int sigAction (int sig, const struction *__ restringir novo, struction sigaction *__ restrito__ velho);

A função Sigaction examina a ação associada a um sinal específico. Agora estamos falando sobre os argumentos no parâmetro da função sigaction. O primeiro é o Int 'sig', como o tipo de dados revela que é um número que se refere ao sinal que já é reconhecido. A função Sigaction define a ação e a associa ao sinal. O argumento SIG usado deve estar na biblioteca.

A Struction constante é um ponteiro que é chamado primeiro como nulo principalmente. Nesse caso, a função Sigaction examina a ação que está definida atualmente para lidar com o SIG. Isso não modificará ou cancelará esta ação. E se o novo ponteiro não for chamado de valor nulo, ele apontará para uma estrutura de sigação. A ação identificada especificamente na estrutura Sigaction se torna a nova ação associada ao SIG.

O terceiro argumento é a estrutura sigaction *antiga, ele aponta o endereço de memória no qual a função sigaction armazena a estrutura da Sigacção. A função Sigaction usa esse endereço de memória para armazenar a estrutura que descreve a atividade atualmente associada ao SIG. O valor antigo pode ser um valor nulo; Nesse caso, a estrutura da sigação não é armazenada como informação.

Estrutura de Sigacção

Agora vamos falar sobre a estrutura da sigação.

Os membros que estão presentes na estrutura são mencionados aqui.

Void (*) (int) sa_handler

É um ponteiro da função e lida com o sinal que vem em direção a ele. O valor desse recurso pode mostrar a ação padrão ou indicar o sinal a ser ignorado.

Máscara sigset_t

Não podemos usar o mecanismo de bloquear qualquer sinal; Se o SA_MASK usou os sinais de bloqueio, esses sinais serão ignorados. A função sigaction () não retorna nenhum erro.

Int sa_flags

Existem muitas bandeiras que afetam o comportamento do sinal. Alguns deles são explicados aqui.

_Sa_ignore

Esta é a única saída, e qualquer aplicativo não pode especificá -lo.

SA-RESTART

Ele diz ao sistema para obter as funções de reinicialização da biblioteca se forem interrompidas por um sinal. As funções nas quais essa função de reinicialização é aplicada são aquelas que são definidas como interrompidas pelo sinal e, em seguida, defina errno como eintr que aceita (), pausa (), close () e grande pausa () são essas funções que são reiniciável se um sinal os interromper.

Sa_siginfo

Esse recurso diz ao sistema para usar a ação do sinal especificada por sa_sigaction em vez de sa_handler. Quando o sinalizador está desligado e a ação é afetada pelo sinal, a função manipuladora de sinal especificada por Sa_handler é invocada como uma função vazia (int signo); Aqui, o signo contém o número do sinal gerado o sistema.

Sa_sigaction

É um ponteiro que aponta para a função atribuída para lidar com o sinal. Esta função contém três parâmetros. O primeiro inclui um número inteiro que contém o sinal da função para ser invocado. O segundo argumento é um tipo de ponteiro siginfo_t; Ele contém informações adicionais sobre a fonte de sinal. O terceiro é o 'ponteiro a anular.'

Implementação da função Sigaction

Implementamos os códigos de Sigacção no sistema operacional Linux. Use um editor de texto para escrever o código -fonte na linguagem de programação C; Para a saída do valor resultante, use o terminal Ubuntu compilando através de um compilador GCC. Que compilar e depois executar o código.

Exemplo 1

Este exemplo contém uma lista de bibliotecas e . Neste exemplo, uma máscara de sinal é usada e definida com sigaction () para não chamar o outro manipulador, especialmente quando um único manipulador está em uso. A função manipuladora de sinal contém o signato como um argumento.

O ID do processo é exibido no programa principal para garantir o trabalho. Sigaction é uma estrutura que descreve um manipulador de sinal. Esta é a razão pela qual um manipulador de sinal está contido por ele. É usada uma máscara de sinal que mostra que deve haver bloqueio de um sinal enquanto a função do manuseio de sinal está na execução. Agora especifique a função do manipulador de sinal quando um sinal especificado ocorreu.

# struct sigaction Act;
# agir.SA.manipulador = $ SIGHANDLER;

Depois disso, todos os sinais são adicionados ao conjunto de máscara de sinal. Todos os sinais serão bloqueados quando as funções do manipulador de sinal estiverem em execução. Quando nosso manipulador de sinal geralmente existe, ele restaura a máscara de sinal original. Sa_restart retomará a função. Um manipulador de sinal é adicionado ao SIGINT.

Depois de escrever o código, compile -o usando o compilador no terminal Ubuntu. “Sig.C ”é o nome de um arquivo.

$ gcc -o sig. c
$./sig

Após a execução, você pode ver que o ID do processo é exibido primeiro cujos sinais precisam ser bloqueados. A mensagem exibida significa que a função retornará um valor positivo.

Exemplo 2

Agora considere outro exemplo, no qual a primeira parte do exemplo determina se o sinal sigchld está sendo ignorado no momento. Usando um ponteiro nulo para um novo argumento, o atual manipulador de sinal não é alterado. O programa principal contém a instrução IF para usar a função Sigaction; Se o valor retornado for -1, significa que a criança está sendo ignorada. E na outra parte, se o valor retornado for o próprio sinal. Isso significa que a criança está sendo padrão.

Na execução, você verá que a criança padrão.

Exemplo 3

Este exemplo contém a mesma funcionalidade que o segundo exemplo, mas alguns recursos adicionais também são adicionados. Como um novo manipulador é adicionado nesta função através da Sigaction.

Conclusão

O artigo 'SigAction Function Uso' contém a função funcionando e uma descrição detalhada de seus parâmetros nos argumentos. Sigaction desempenha um papel vital no bloqueio dos sinais que não são reconhecidos ou são de hackers. É por isso que a maioria dos programadores prefere as funções de Sigacção a serem usadas nos programas. SA_FLAG é um argumento essencial da função Sigaction, por isso explicamos algumas bandeiras importantes com funcionalidade básica. O sistema operacional Linux se aplica a um papel importante na implementação da função Sigaction na linguagem de programação C. Este guia tem como objetivo explicar os recursos da Sigacção e a estrutura projetada para atingir os sinais que se aproximam.