#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void print(sigset_t *set)
{
int ret = sigpending(set);
if (ret == -1)
{
perror("sigpending failed");
exit(1);
}
for (int ii = 0; ii < 32; ++ii)
{
if (sigismember(set, ii) == 1)
{
putchar('1');
}
else if (sigismember(set, ii) == 0)
{
putchar('0');
}
}
printf("\n");
return;
}
int main(int argc, char *argv[])
{
sigset_t set, oldset;
int ret = sigemptyset(&set);
if (ret == -1)
{
perror("sigemptyset failed");
exit(1);
}
ret = sigaddset(&set, SIGINT);
if (ret == -1)
{
perror("sigaddset failed");
exit(1);
}
ret = sigaddset(&set, SIGTSTP);
if (ret == -1)
{
perror("sigaddset failed");
exit(1);
}
ret = sigprocmask(SIG_BLOCK, &set, &oldset);
if (ret == -1)
{
perror("sigprocmask failed");
exit(1);
}
while (1)
{
print(&set);
sleep(1);
}
return 0;
}
