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