Copyright (C) 2000-2012 |
GNU Info (libc.info)Testing for DeliveryBlocking to Test for Delivery of a Signal ----------------------------------------- Now for a simple example. Suppose you establish a handler for `SIGALRM' signals that sets a flag whenever a signal arrives, and your main program checks this flag from time to time and then resets it. You can prevent additional `SIGALRM' signals from arriving in the meantime by wrapping the critical part of the code with calls to `sigprocmask', like this: /* This variable is set by the SIGALRM signal handler. */ volatile sig_atomic_t flag = 0; int main (void) { sigset_t block_alarm; ... /* Initialize the signal mask. */ sigemptyset (&block_alarm); sigaddset (&block_alarm, SIGALRM); while (1) { /* Check if a signal has arrived; if so, reset the flag. */ sigprocmask (SIG_BLOCK, &block_alarm, NULL); if (flag) { ACTIONS-IF-NOT-ARRIVED flag = 0; } sigprocmask (SIG_UNBLOCK, &block_alarm, NULL); ... } } automatically generated by info2www version 1.2.2.9 |