English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Linguagem C

Controle de Fluxo de Linguagem C

Função do C

Array do C

Ponteiro do C

String do C

Estrutura de Linguagem C

Arquivo de Linguagem C

C Outros

Manual de Referência da Linguagem C

Uso e exemplo da função signal() da biblioteca C

Biblioteca padrão do C - <signal.h>

Função da biblioteca C void (*signal(int sig, void (*func)(int)))(int) Definir uma função para tratar o sinal, ou seja, com sig Parâmetro do tratamento de sinal.

Declaração

A seguir está a declaração da função signal().

void (*signal(int sig, void (*func)(int)))(int)

Parâmetro

  • sig  -- Código de sinal usado como variável no tratamento de sinal. Aqui estão alguns dos constantes de sinal importantes:

MacroSinal
SIGABRT(Sinal de Aborto) Encerramento anormal do programa.
SIGFPE(Sinal de Ponto Flutuante)-(Sinal de Exceção Ponto) Erro de operação aritmética, como divisão por zero ou overflow (não necessariamente operação de ponto flutuante).
SIGILL(Sinal de Instrução Ilegal) Imagem de função ilegal, como instrução ilegal, geralmente devido a uma variante no código ou a tentativa de executar dados.
SIGINT(Sinal de Interrupção) Sinal de interrupção, como ctrl-C, geralmente gerado pelo usuário.
SIGSEGV(Sinal de Violação de Segmentação) Acesso ilegal à memória, como acesso a uma unidade de memória inexistente.
SIGTERM(Sinal de Terminação) Envio de solicitação de terminação do programa para este programa.
  • func  -- Um ponteiro para uma função. Pode ser uma função definida pelo programa ou uma das funções pré-definidas a seguir:

SIG_DFLO tratamento de sinal padrão.
SIG_IGNIgnorar sinal.

Valor de Retorno

A função retorna o valor da função de tratamento de sinal antes, retorna SIG_ERR em caso de erro.

Exemplo Online

A seguir está um exemplo que demonstra o uso da função signal().

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
   signal(SIGINT, sighandler);
   while(1) 
   {
      printf("iniciar o sono por um segundo...\n");
      sleep(1);
   }
   return(0);
}
void sighandler(int signum)
{
   printf("capturar sinal %d, sair...\n", signum);
   exit("}}1);
}

Vamos compilar e executar o programa acima, o que produzirá o seguinte resultado e o programa entrará em um loop infinito, precisa usar CTRL + Chave de saída do C.

Iniciar o sono por um segundo...
Iniciar o sono por um segundo...
Iniciar o sono por um segundo...
Iniciar o sono por um segundo...
Iniciar o sono por um segundo...
Capturar sinal 2,sair...

Biblioteca padrão do C - <signal.h>