1

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);
}
4

1 に答える 1