#include <stdio.h> #include <unistd.h> #include "signals.h" #define SIG_CATCH 10 int signum; void handler (int signo) { fprintf (stdout, "\nSIGALRM received"); fflush (stdout); signum++; return; } int main () { int num; set_signal (SIGALRM); fprintf (stdout, "\nWait for signal %d\n", SIGALRM); fflush(stdout); if (set_signal_handler(handler) == 1) { fprintf (stderr, "\nset_signal_handler() failed\n"); return 1; } signum = 0; num = 0; fprintf (stdout, "\nCatch about %d signals", SIG_CATCH); fflush (stdout); while (num < SIG_CATCH) { sleep (1); if (block_all_signal() == 1) { fprintf (stderr, "\nblock_all_signal() failed\n"); return 1; } num = signum; if (retore_signal() == 1) { fprintf (stderr, "\nretore_signal() failed\n"); return 1; } if (get_pending_signals() == 1) { fprintf (stderr, "\nget_pending_signals() failed\n"); return 1; } } if (block_all_signal() == 1) { fprintf (stderr, "\nblock_all_signal() failed\n"); return 1; } fprintf (stdout, "\nAbout %d signals received, block all signals and sleep 10 seconds.", SIG_CATCH); fflush (stdout); sleep (10); fprintf (stdout, "\nUnblock all signals."); fflush (stdout); fprintf (stdout, "\nLook for suspended signals."); fflush (stdout); if (retore_signal() == -1) { fprintf (stderr, "\nretore_signal() failed\n"); return 1; } if (get_pending_signals() == -1) { fprintf (stderr, "\nget_pending_signals() failed\n"); return 1; } while (1) { if (get_pending_signals() == -1) { fprintf (stderr, "\nget_pending_signals() failed\n"); return 1; } } fprintf (stdout, "\nReturn"); fflush (stdout); return 0; }