/* * Exemplo de uso de pilha alternativa. */ #include #include #include #include void tratador_generico(int sig) { psignal(sig, "Início"); printf("%p\n", (void*) &sig); psignal(sig, "Fim "); } void trata_SIGUSR2 (int sig) { psignal(sig, "Início"); printf("%p\n", (void*) &sig); raise(SIGUSR1); psignal(sig, "Fim "); } int main (void) { stack_t pilha; struct sigaction act; pilha.ss_size = 3*SIGSTKSZ; pilha.ss_sp = malloc(pilha.ss_size); pilha.ss_flags = 0; if (sigaltstack (&pilha, NULL) == -1) { perror("sigaltstack"); return 0; } act.sa_handler = trata_SIGUSR2; sigemptyset(&act.sa_mask); act.sa_flags = SA_ONSTACK; signal (SIGUSR1, tratador_generico); sigaction(SIGUSR2, &act, NULL); raise(SIGUSR1); raise(SIGUSR2); sleep(2); return 0; }