#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;
}