English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
A seguir está a declaração da função signal().
void (*signal(int sig, void (*func)(int)))(int)
sig -- Código de sinal usado como variável no tratamento de sinal. Aqui estão alguns dos constantes de sinal importantes:
Macro | Sinal |
---|---|
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_DFL | O tratamento de sinal padrão. |
SIG_IGN | Ignorar sinal. |
A função retorna o valor da função de tratamento de sinal antes, retorna SIG_ERR em caso de erro.
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...