Depois do Ubuntu 20.04 Login bem -sucedido, você precisa lançar o shell do Ubuntu 20.04 Sistema primeiro após o login. Então, experimente o atalho "Ctrl+Alt+T" simplesmente na tela da área de trabalho. Ele lançará o shell do terminal para você em alguns segundos. Atualize seu sistema usando o pacote APT do seu sistema. Depois disso, você tem que executar a instrução "Touch" junto com o nome do arquivo que deseja gerar, eu.e., Para criar o arquivo C através do shell. Este arquivo recém -criado pode ser encontrado na pasta "Home" do Arquivo do seu sistema Explorer. Você pode tentar abri -lo com o editor de "texto" para criar código nele. Outra maneira de abri -lo no shell é usar o editor "GNU Nano" usando a palavra -chave "nano" com um nome de arquivo, conforme demonstrado embaixo.
Exemplo 01:
Iniciamos nosso código no editor "Nano", incluindo alguns cabeçalhos C necessários. Esses cabeçalhos podem ser os cabeçalhos mais comuns como “stdio.h ",“ unistd.h "e" stdlib.h ". Fora isso, o arquivo de cabeçalho mais importante “Signal.H ”foi adicionado para utilizar as funções de manuseio de sinal no código C. Todo o trabalho foi realizado no método principal deste programa (). Então, depois de iniciar o método, inicializamos algumas variáveis de construção de sinal usando o objeto "sigset_t", eu.e., S, OS e PS. O "S" significa Signal, "OS" significa um conjunto de sinal original, e o "PS" significa um conjunto de sinal pendente.
O "sigemptyset" tem usado o construto "s" para inicializar ou declarar uma máscara de sinal e desconsiderar todos os sinais. Depois disso, a função "sigaddset" foi utilizada para adicionar o sinal inicializado "s" ao conjunto de sinal SIGINT especificado. A rotina do manipulador de sinal SIGINT refere -se ao "ctrl+c", i.e., personagem interrompido. Isso interromperá a execução do processo atual e voltará ao loop principal.
Agora vem a função SigProcMask aqui usando três parâmetros. O parâmetro SIG_BLOCK mostra que todos os sinais encontrados em um conjunto de sinais "s" serão adicionados ao conjunto de sinal atual. O & S indica o ponteiro de um conjunto de sinal específico que foi usado para alterar a máscara de sinal de acordo com a construção "sigint". O parâmetro "OS" aponta para o conjunto de sinal que armazena a máscara de sinal para um método específico. A instrução printf está aqui para exibir a antiga máscara de sinal do conjunto de sinal. A função "sigpending" está aqui para salvar dados sobre os sinais no conjunto de sinal que estão pendentes. A instrução printf está novamente aqui para mostrar o sinal pendente definido no shell usando o construto "ps". O método "Kill" surgiu aqui para matar o processo atual usando o ID do processo através da função "getpid ()". A função sigpending é novamente chamada para obter os sinais pendentes no conjunto, e a instrução printf exibirá aqueles. A função SigProcMask usa o conjunto predefinido "sig_unblock" para continuar desbloqueando e levantando a função na lista pendente. O conjunto de sinais "S" será liberado com a ajuda da Signal Mask "OS.”
Compile seu arquivo de código C usando a instrução mostrada no abrevimento no shell.
Seu arquivo foi executado. Ele mostrará o sinal antigo definido no shell, “OS.”Mas, como os sinais do conjunto“ S ”agora estão bloqueados, veremos que os sinais estão recebendo, mas pendentes e não executando. Não podemos matar o processo, pois o processamento de sinais está bloqueado. Por fim, lançamos os sinais.
Exemplo 02:
Vejamos outro exemplo da função "SigprocMask" é C para bloquear e desbloquear o conjunto de sinal específico. Então, adicionamos um novo arquivo e tentamos um novo código. Primeiro, você precisa adicionar os mesmos arquivos de cabeçalho no arquivo de código, como mostrado abaixo. A função "Catcher" definida pelo usuário está aqui para simplesmente exibir que estamos dentro desta função usando sua função Printf.
A execução principal começa a partir da função principal () do nosso código. Contém dois argumentos. Primeiro de tudo, utilizamos construções de tempo. A estrutura sigaction é declarada como "sact" para definir a natureza para um sinal para fazer algo. O construto "sigset_t" é usado para declarar dois conjuntos de sinais, i i.e., "NS" para um novo conjunto e "os" para sets antigos. A variável de tipo duplo “DIF” é declarada. Primeiro de tudo, a função SigEmptyset é usada para inicializar a máscara de sinal para a estrutura "sact" e excluir todos os sinais. O manipulador SA_FLAGS foi usado para máscara de bittion de sigacção e inicializado para zero. O "sa_handler" foi usado para declarar a função "apanhador" como manipulador de sinal usando o objeto Sigaction "sact". A função Sigaction é chamada aqui usando o Sigalrm para definir o alarme para o sinal "sact" aqui.
O "Sigemptyset" foi utilizado no sinal "NS" definido para inicializar uma máscara de sinal e excluir todos os sinais. A função Sigaddset adiciona o SigalRM ao conjunto de sinal "NS". O SigProcMask adiciona os sinais "NS" ao conjunto de sinal atual. O conjunto de sinal "OS" representa a máscara de sinal para um processo específico. O horário de início foi observado e impresso usando a função "ctime ()" no printf. O alarme por 1 segundo é inicializado e o tempo de acabamento foi observado. A diferença entre os horários de acabamento e de início foi calculada usando a função "Difftime". Se a diferença for inferior a 10 segundos, a função SigProcMask usará o sinal "OS" definido para substituir a atual máscara de sinal para um processo específico usando SIG_SETMASK. A última instrução PRINTF está aqui para mostrar o momento em que um conjunto de sinal é liberado para alarmes.
Depois de compilar e executar o arquivo, ele nos mostra a hora em que o conjunto de sinal de alarme é bloqueado. Após alguns segundos, a função do apanhador é chamada e outra declaração mostra o tempo de desbloqueio do sinal de alarme definido para liberar.
Conclusão:
Este artigo mostra a explicação sobre o uso da função SigprocMask no idioma C. Discutimos 2 exemplos breves e diretos para ilustrar o funcionamento da função SigprocMask junto com outras funções de sinal. Esperamos que este artigo seja um bônus para todos os usuários que são novos nos sinais.