Função da biblioteca C - sinal ()
Descrição
A função da biblioteca C void (*signal(int sig, void (*func)(int)))(int) define uma função para manipular o sinal, ou seja, um manipulador de sinal com o número do sinal sig.
Declaração
A seguir está a declaração da função signal ().
void (*signal(int sig, void (*func)(int)))(int)
Parâmetros
sig- Este é o número do sinal para o qual uma função de manuseio é definida. A seguir estão alguns números de sinal padrão importantes -
Sr. Não. | Macro e sinal |
---|---|
1 | SIGABRT (Abortar sinal) Terminação anormal, como é iniciada pela função. |
2 | SIGFPE (Exceção de ponto flutuante de sinal) Operação aritmética errônea, como divisão por zero ou uma operação que resulta em estouro (não necessariamente com uma operação de ponto flutuante). |
3 | SIGILL (Instrução ilegal de sinal) Imagem de função inválida, como uma instrução ilegal. Geralmente, isso ocorre devido a uma corrupção no código ou a uma tentativa de executar dados. |
4 | SIGINT (Interrupção de sinal) Sinal de atenção interativo. Geralmente gerado pelo usuário do aplicativo. |
5 | SIGSEGV (Violação de segmentação de sinal) Acesso inválido ao armazenamento - Quando um programa tenta ler ou gravar fora da memória, ele está alocado para ele. |
6 | SIGTERM (Terminar sinal) Solicitação de rescisão enviada ao programa. |
func- Este é um ponteiro para uma função. Esta pode ser uma função definida pelo programador ou uma das seguintes funções predefinidas -
Sr. Não. | Descrição da função |
---|---|
1 | SIG_DFL Tratamento padrão - O sinal é tratado pela ação padrão para aquele sinal específico. |
2 | SIG_IGN Ignore Signal - O sinal é ignorado. |
Valor de retorno
Esta função retorna o valor anterior do manipulador de sinal, ou SIG_ERR em caso de erro.
Exemplo
O exemplo a seguir mostra 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("Going to sleep for a second...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum) {
printf("Caught signal %d, coming out...\n", signum);
exit(1);
}
Vamos compilar e executar o programa acima que produzirá o seguinte resultado e o programa entrará em um loop infinito. Para sair do programa usamos as teclas CTRL + C.
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Caught signal 2, coming out...