读书人

Linux中main函数下部写的有关几个

发布时间: 2013-09-07 14:12:44 作者: rapoo

Linux中,main函数下面写的,有关几个信号处理函数?
sigset_t signal_mask;
sigemptyset (&signal_mask);
sigaddset (&signal_mask, SIGPIPE);
int rc = pthread_sigmask (SIG_BLOCK, &signal_mask, NULL);

这个函数和它们的参数都是什么意思啊? linux
[解决办法]


在多线程的程序里,希望只在主线程中处理信号,可以使用

函数:
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

读书人网 >UNIXLINUX

热点推荐