c–sigaddset用于什么?

c–sigaddset用于什么?,第1张

概述我有这个代码,我使用sigaddset和sigaction.但是如果我评论segaddset,结果是一样的 struct sigaction act; act.sa_handler = process_alarm; act.sa_flags = 0; sigemptyset(&act.sa_mask)

我有这个代码,我使用sigaddset和sigaction.但是如果我评论segaddset,结果是一样的

   struct sigaction act;    act.sa_handler = process_alarm;    act.sa_flags = 0;              sigemptyset(&act.sa_mask);    //sigaddset(&act.sa_mask,SIGINT);    sigaction(SIgalRM,&act,NulL);   for(;;)    {       alarm(3);       pause();     } 

我为什么需要使用它?最佳答案你在这做两件事:

>填充sigset_t. sigset_t只是信号值的集合,用于各种系统调用.您可以:

>创建一个空的sigset_t(sigemptyset()
>向集合添加信号(sigaddset())
>删除信号到集合(sigdelset())
>等……

>设置信号处理程序的信号掩码.当您通过调用sigaction()设置信号处理程序时,可以通过操作struct sigaction的sigset_t sa_mask成员来实现.

信号处理程序的信号掩码意味着当信号处理程序正在执行时,掩码中的信号将被阻塞 – 即只要它们被阻塞就不会处理这些信号.信号处理程序完成后,信号输入将被解除阻塞.
被阻止的信号不会“丢失”,当特定信号再次被阻塞时,它将被处理.

sigaddset(& act.sa_mask,SIGINT);表示SIgalRM处理程序的代码运行时不会发生SIGINT信号.

另一方面,如果你注释掉sigaddset(& act.sa_mask,SIGINT);,你只剩下一个用sigemptyset(& act.sa_mask);创建的信号的空列表.因此,在SIgalRM处理程序函数运行时发生的任何信号都可能抢占该处理程序并执行该另一个信号的信号处理程序.

对于SIGINT,您通常不会注意到与手动测试有任何区别 – 当您的SIgalRM处理程序正在运行时,您不可能设法完全按CTRL-C,并且您的SIgalRM处理程序可能运行得足够快,如果SIGINT是,则您不会注意到稍微延迟了.

总结

以上是内存溢出为你收集整理的c – sigaddset用于什么?全部内容,希望文章能够帮你解决c – sigaddset用于什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/yw/1047847.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存