/*
 * Entendendo funcionamento de sinais em ambiente Linux/Unix.
 *
 * Origem:  http://www.jorgepereira.com.br/
 * Autores: Jorge Pereira <jorge@jorgepereira.com.br>
 *          Fabiano Arruda <fabiano.arruda@hotmail.com>
 *
 */
 
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

#define EXIT_VUGO 0

void div_zero (int val)
{   
   printf("Opa! Divisão por zero detectado!!!\n");
   exit(EXIT_FAILURE); 
} 

int main()
{   
   float numerator = 3.0F, denominator = 0.0F; 

   if (signal(SIGFPE, div_zero) == SIG_ERR)
   {   
      perror ("Impossivel criar um trap para o sinal SIGFPR");
      abort (); 
   } 

   if (denominator == 0.0F)
       raise(SIGFPE); 
   else
       printf("O Resultado da divisão e: %g\n", numerator / denominator);
   return EXIT_VUGO;
}