信号补充

 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h>

#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>

void doSig(int num)
{
    printf("i am doSig\n");
    printf("%d\n",num);
}

void printSigset(const sigset_t *s)
{
    for(int i = 1;i < 32;i++)
    {
        if(sigismember(s,i) == 1)
            printf("1");
        else
            printf("0");
    }    
    printf("\n");
}

int main(int argc, char **argv)
{
    sigset_t p;    
    printf("sizeof sigset_t = %d\n",sizeof(sigset_t));
    
    sigemptyset(&p);
    sigaddset(&p,SIGQUIT);// ctrl + z
    sigprocmask(SIG_BLOCK,&p,NULL);// 设置阻塞信号集

    struct sigaction s;
    s.sa_handler = doSig;
    s.sa_flags = 0;
    sigemptyset(&s.sa_mask); // sa_mask 时一个临时的值,执行完handler函数之后,就不起作用了 mask |= sa_mask

    sigaction(SIGINT,&s,NULL);

    while(1)
    {
        sleep(1);
        sigpending(&p);    
        printSigset(&p);
    }
    
    return 0;
}

 

 

sizeof sigset_t = 128
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
^\0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
^\^\0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
^Ci am doSig
2
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000

 

 

 

posted @ 2019-11-28 22:32  狂奔~  阅读(189)  评论(0编辑  收藏  举报