0
我想用printf打印sigset。在这个程序中,我用sigprocmask来阻止SIGHUP和SIGTERM。在将set和oset初始化为空集之后,它们会给出一些随机的十六进制字符串作为输出。我应该如何解决这个问题?sigset_t unix使用sigprocmask()
另外,如果我在执行后按Ctrl-C,我对此程序的预期输出有疑问。捕手功能是否也会继承当前的信号设置,并且应该按照设置打印?
#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);
}
捕手里面,我使用'sigprocmask(SIG_SETMASK,NULL,&set);'如果它不影响当前的信号掩码 – user3660655
当然不是,NULL作为第二个参数意味着没有?新面具保持旧面貌。 –
非常感谢....我在'sigprocmask()'中忘记了NULL参数的影响' – user3660655