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...