When to re-enable signal handlers
I'm reading the GNU libc manual, the part about signals.
In this page it shows some code. I report it here:
I was curious about the signal handler function. Why does it have to re-enable itself? Is it always necessary? If not, when is it? I'd like to know when I have to re-enable signal handlers.
/* This flag controls termination of the main loop. */
volatile sig_atomic_t keep_going = 1;
/* The signal handler just clears the flag and re-enables itself. */
catch_alarm (int sig)
keep_going = 0;
signal (sig, catch_alarm);
puts ("Doing stuff while waiting for alarm....");
/* Establish a handler for SIGALRM signals. */
signal (SIGALRM, catch_alarm);
/* Set an alarm to go off in a little while. */
/* Check the flag once in a while to see when to quit. */
I'm in a situation where I can't use sigaction() function (exam rule).
PS: a user in IRC told me "It's necessary on some platforms (implementation-defined when) with signal(). But sigaction() should avoid that issue." Is this true?