UNIX环境高级编程笔记(12)- 函数sigprocmask


前言

本章主要介绍函数sigprocmask、给出了打印进程中的信号屏蔽字例程


一、函数sigprocmask

#include <signal.h>。

int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset);

功能:给一个进程添加或者去掉信号屏蔽子。

参数:若oset为为空指针,那么进程的当前信号屏蔽字通过oset返回。

参数:其次,若set是一个非空指针,则参数how指示如何修改信号屏蔽子,取值分别为:SIG_BLOCK(阻塞 或操作)、SIG_UNBLOCK(非阻塞) SIG_SETMASK(阻塞 赋值操作)。

返回值:正确为0,错误非0.

二、为进程打印信号屏蔽字

代码如下(示例):

void pr_mask(const char *ptr,sigset_t sigset)
{
    //sigset_t sigset;
    int errno_save;


    errno_save = errno;
    if(sigprocmask(0,NULL,&sigset) < 0)
        err_sys("sigprocmask error");
    else{
        printf("%s",ptr);
        if(sigismember(&sigset,SIGINT))
            printf("SIGINT");
        if(sigismember(&sigset,SIGQUIT))
            printf("SIGQUIT");
        if(sigismember(&sigset,SIGUSR1))
            printf("SIGUSR1");
        if(sigismember(&sigset,SIGALRM))
            printf("SIGALRM");

        printf("\n");
    }
    errno = errno_save;
}
void unix_10_14_sigprocmask(void)
{
    sigset_t newmask;
    sigemptyset(&newmask);
    sigaddset(&newmask,SIGQUIT); //添加的信号屏蔽字
    if(sigprocmask(SIG_BLOCK,&newmask,NULL) < 0)
        err_sys("SIG_BLOCK error");
    pr_mask("sigismember:",newmask);//打印信号的屏蔽子

}
#define UNIX_10_14_SIGPROCMASK
int main(int argc, char *argv[])
{
#ifdef UNIX_10_14_SIGPROCMASK
    unix_10_14_sigprocmask();
#endif
    printf("MAIN END\n");
    return 0;
}

 


总结

本章主要讲解了信号屏蔽字相关函数及其用法。

猜你喜欢

转载自blog.csdn.net/lipengcheng_111/article/details/115182611