我正在尝试使用 printf 打印 sigset。在这个程序中,我使用了 sigprocmask 来阻止 SIGHUP 和 SIGTERM。在将 set 和 oset 初始化为空集后,它们会给出一些随机的十六进制字符串作为输出。我该怎么解决这个问题??
另外,如果我在执行后按 Ctrl-C,我对该程序的预期输出有疑问。catcher 函数是否也继承了当前的信号集并且应该与 set 一样打印?
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<bits/sigset.h>
void catcher(int sig){
sigset_t set;
sigprocmask(SIG_SETMASK, NULL, &set);
printf("%x inside function\n",set);
}
int main()
{
sigset_t set,oset;
signal(SIGINT,catcher);
sigemptyset(&set);
sigemptyset(&oset);
printf("%x\n",oset);
printf("%x\n",set);
sigaddset(&set,SIGHUP);
sigaddset(&set,SIGTERM);
sigprocmask(SIG_SETMASK,NULL,&oset);
printf("%x\n",oset);
printf("%x\n",set);
sigprocmask(SIG_BLOCK,&set,&oset);
pause();
sigprocmask(SIG_SETMASK,&oset,&set);
printf("%x\n",set);
}