Linux中,main函数下面写的,有关几个信号处理函数?
sigset_t signal_mask;
sigemptyset (&signal_mask);
sigaddset (&signal_mask, SIGPIPE);
int rc = pthread_sigmask (SIG_BLOCK, &signal_mask, NULL);
这个函数和它们的参数都是什么意思啊?
------解决方案--------------------
在多线程的程序里,希望只在主线程中处理信号,可以使用
函数:
int pthread_sigmask (int how,
const sigset_t *set,
sigset_t *oset)
用作在主调线程里控制信号掩码。
How:
SIG_BLOCK: 结果集是当前集合参数集的并集
SIG_UNBLOCK: 结果集是当前集合参数集的差集
SIG_SETMASK: 结果集是由参数集指向的集
------解决方案--------------------sigset_t signal_mask;//定义一个信号集变量
sigemptyset (&signal_mask);//把变量清空为空的信号集
sigaddset (&signal_mask, SIGPIPE);//往信号集中加入信号SIGPIPE
int rc = pthread_sigmask (SIG_BLOCK, &signal_mask, NULL);//设置进程屏蔽字,新的线程会继承它的创建线程的信号屏蔽字
原型为:int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);
它可以根据how的值来修改进程的屏蔽字,与sigprocmask相似,但是它明确是应用于线程中。成功返回0,失败返回错误码。
新的信号屏蔽字由参数set(非空)指定,而原先的信号屏蔽字将保存在oset(非空)中。如果set为空,则how没有意义,但此时调用该函数,如果oset不为空,则把当前信号屏蔽字保存到oset中。
how的不同取值及操作如下所示:
SIG_BLOCK :把参数set中的信号添加到信号屏蔽字中
SIG_SETMASK :把信号屏蔽字设置为set中的信号
SIG_UNBLOCK :从信号屏蔽字中删除参数set中的信号
ps:可以输入man 3 pthread_sigmask