int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oldset);
3函数说明
一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。sigprocmask()可以用来检测或改变目前的信号屏蔽字,其操作依参数how来决定,如果参数oldset不是NULL
指针,那么目前的信号屏蔽字会由此指针返回。如果set是一个非空指针,则参数how指示如何修改当前信号屏蔽字。每个进程都有一个用来描述哪些信号递送到进程时将被阻塞的信号集,该信号集中的所有信号在递送到进程后都将被阻塞。
参数how:
SIG_BLOCK
|
该进程新的信号屏蔽字是其当前信号屏蔽字和set指向信号集的并集。set包含了我
们希望阻塞的附加信号。
|
SIG_UNBLOCK
|
该进程新的信号屏蔽字是其当前信号屏蔽字和set所指向信号集的补集的交集。set包含了
我们希望解除阻塞的信号.
|
SIG_SETMASK
|
该进程新的信号屏蔽是set指向的值
|
除SIG_SETMASK外,如果set是个空指针,则不改变该进程的信号屏蔽字,how的值也无意义。
SIG_SETMASK与set空指针结合使用,即清空所有屏蔽的信号。
返回值
执行成功返回0,失败返回-1。
错误代码
EFAULT
|
参数set,oldset指针地址无法存取
|
EINTR
|
此调用被中断
|
对进程信号掩码进行处理。
sigfillset()用来将参数set信号集初始化,然后把所有的信号加入到此信号集里即将所有的信号标志位置为1,屏蔽所有的信号。它是一个宏实现,如下所示:
#define sigfillset(ptr) ( *(ptr) = ~(sigset_t)0, 0)
因为函数sigfillset必须返回0,所以使用C语言里面的逗号运算符,它将逗号运算符后的值做为
表达式的值返回。函数在执行成功时则返回0;如果有错误则返回-1,并设置errno的值,如果errno的值为EFAULT,则表示参数set
指针地址无法存取。