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

void handler(int sig);

int
main(int argc, char *argv[])
{
    ssize_t n;
    char buf[BUFSIZ];
    struct sigaction sa1;
    struct sigaction sa2;

    sigemptyset(&sa1.sa_mask);
    sigemptyset(&sa2.sa_mask);

    sa1.sa_flags = SA_RESTART;
    sa2.sa_flags = 0;

    sa1.sa_handler = handler;
    sa2.sa_handler = handler;

    if (sigaction(SIGUSR1, &sa1, NULL) == -1)
        err(EXIT_FAILURE, "sigaction");
    if (sigaction(SIGUSR2, &sa2, NULL) == -1)
        err(EXIT_FAILURE, "sigaction");

    printf("PID=%ld\n", (long) getpid());
    printf("enter a line or send this process SIGUSR1 or SIGUSR2 signal\n");

    if ((n = read(STDIN_FILENO, buf, BUFSIZ)) == -1)
        warn("read");

    printf("\tread %ld characters\n", (long) n);
    printf("\t%s", buf);
    exit(EXIT_SUCCESS);
}

void
handler(int sig)
{
    printf("caught signal %d (%s)\n", sig, getSigname(sig));
}
