/*
* function: 将2号信号(Ctrl+c)和20号信号(ctrl+z)屏蔽
*
* 2020-12-26
*/
#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); // 将set清空
if (ret == -1)
{
perror("sigemptyset failed");
exit(1);
}
ret = sigaddset(&set, SIGINT); // 将SIGINT信号加入到set中
if (ret == -1)
{
perror("sigaddset failed");
exit(1);
}
ret = sigaddset(&set, SIGTSTP); // 将SIGSTP信号加入到set中
if (ret == -1)
{
perror("sigaddset failed");
exit(1);
}
ret = sigprocmask(SIG_BLOCK, &set, &oldset); // 将set中的信号屏蔽
if (ret == -1)
{
perror("sigprocmask failed");
exit(1);
}
while (1)
{
print(&set);
sleep(1);
}
return 0;
}
signalset.cpp
最新推荐文章于 2024-10-10 22:04:37 发布