前言
本章主要介绍函数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;
}
总结
本章主要讲解了信号屏蔽字相关函数及其用法。