軟中斷訊號集與阻塞測試

勺顛顛發表於2019-09-25

訊號集操作
訊號的動作【繫結的中斷處理程式或叫捕獲,預設動作,忽略】
具體可參與前面發過的中斷系統【PHP版本】,不在詳細解釋

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void handler(int signo)
{
        printf("get a signal no is %d\n",signo);
}

void showHandler(sigset_t *pending)
{
        int i=1;
        for(;i<=31;i++){
                if(sigismember(pending,i)){
                        printf("1");
                }else{
                        printf("0");
                }
        }

        printf("\n");
}

int main()
{
        sigset_t set,oset;

        sigemptyset(&set);
        sigemptyset(&oset);

        sigaddset(&set,2);
//      sigprocmask(SIG_SETMASK,&set,&oset);
        sigprocmask(SIG_BLOCK,&set,&oset);

        signal(2,handler);

        sigset_t pending;

        int i =15;

        while(1){
                sigpending(&pending);
                showHandler(&pending);

                sleep(1);
                if(i--==0){
                        //sigprocmask(SIG_SETMASK,&oset,NULL);
                        sigprocmask(SIG_UNBLOCK,&set,NULL);
                }
        }
        return 0;
}
~
~
本作品採用《CC 協議》,轉載必須註明作者和本文連結

jackChen

相關文章