【原创】sigaction() 解决了在某些平台上需要再度安装信号的问题

一旦对给定的信号采取sigaction() 设置了捕捉动作,那么在再次调用sigaction() 显式改变它之前处理方式一直有效。这种处理方式和signal() 在某些平台上的不可靠机制不同,符合了posix.1 标准。

测验如下:

[@more@]
改用sigaction 后发现即使是在AIX上也解决了signal函数可能存在需要再次安装信号的不可靠问题

源代码:
#include
#include
#include

int main()
{
void my_alarm(int);
struct sigaction act,oact;

act.sa_handler=my_alarm;
sigemptyset(&act.sa_mask);
sigaddset(&act.sa_mask,SIGALRM);


if(sigaction(SIGALRM,&act,&oact)<0)
{
printf("nError in set action!n");
exit(1);
}
alarm(1);
for(;;)
{
}
}

void my_alarm(int signo)
{

/* signal(SIGALRM,my_alarm);*/
printf("n In signal handler..........n");
alarm(1);
}


运行:

(fund)/fund/c#
(fund)/fund/c# xlc ./xinhao.c -o ./xinhao
(fund)/fund/c# ./xinhao

In signal handler..........

In signal handler..........

In signal handler..........

In signal handler..........
^C(fund)/fund/c#
(fund)/fund/c#


以后彻底抛弃signal 啦

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7437037/viewspace-978971/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7437037/viewspace-978971/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值