#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <err.h>
#include "../lpi.h"         // for getSigname()
                            // implemented in ../defs.c

void handler(int sig, siginfo_t *siginfo, void *ucontext);

int
main(int argc, char *argv[])
{
    struct sigaction sa;
    int i;

    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_SIGINFO;
    sa.sa_sigaction = handler;

    for (i = 1; i < NSIG; i++)
        if (sigaction(i, &sa, NULL) == -1)
            warn("sigaction()-signal %d", i);

    printf("PID=%ld\n", (long) getpid());
    while (1)
        pause();

    exit(EXIT_SUCCESS);
}

void
handler(int sig, siginfo_t *siginfo, void *ucontext)
{
    printf("caught signal %d (%s)\n",
            siginfo->si_signo, getSigname(siginfo->si_signo));
    printf("--------------------\n");
    printf("\tsi_signo=%d\n", siginfo->si_signo);
    printf("\tsi_code =%d\n", siginfo->si_code);
    //printf("\tsi_value=%d\n", siginfo->si_value);
    printf("\tsi_pid  =%ld\n", (long) siginfo->si_pid);
    printf("\tsi_uid  =%ld\n", (long) siginfo->si_uid);
}
