/*
 * 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>

void myHandler(int sig)
{
    int op;
    
    printf("recebeu o sinal de numero: %i\n", sig);
    printf("ocorreu uma falha de segmentação, deseja sair?\n1 - [s]IM\n2 - [n]AO\nResp: ");
    
    scanf("%i", &op);
    if (op == 1)
    {
        printf("saindo da aplicação...\n");
        exit(1);
    }
    else
    {
        printf("continuando o programa...\n");
    }
}

int main(int argc, char** argv)
{
    printf("adicionando um handler para o sinal SIGSEGV\n"); 
    signal(SIGSEGV, myHandler);
    
    printf("gerando um sigsegv, VUGO! SAVE-ME!!!\n");
    int *pi;
    pi = 0;
    printf("tentando acessar um ponteiro sem alocacao. %d", *pi);
    
    while(1){}
}

