...
Code Block | ||
---|---|---|
| ||
#include <signal.h>
volatile sig_atomic_t sig1 = 0;
volatile sig_atomic_t sig2 = 0;
void handler(int signum) {
if (signum == SIGUSR1) {
sig1 = 1;
}
else if (sig1) {
sig2 = 1;
}
}
int main(void) {
signal(SIGUSR1, handler);
signal(SIGUSR2, handler);
while (sig2 == 0) {
/* do nothing or give up CPU for a while */
}
/* ... */
return 0;
}
|
...
Compliant Solution (POSIX)
The POSIX defines the sigaction()
function , which assigns handlers to signals in a similar fashion manner to the C99 signal()
function, but also allows signal masks to be set explicitly. Consequently, sigaction()
can be used to prevent a signal handler from interrupting itself.
...