牛骨文教育服务平台(让学习变的简单)
博文笔记

进程信号掩码处理

创建时间:2013-12-06 投稿人: 浏览次数:800
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指针地址无法存取。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。