printf を使用して sigset を印刷しようとしています。このプログラムでは、sigprocmask を使用して SIGHUP と SIGTERM をブロックしました。set と oset を空のセットに初期化した後、出力としてランダムな 16 進文字列が返されます。この問題を解決するにはどうすればよいですか??
また、実行後に 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);
}