【原创】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/

你可能感兴趣的:(【原创】sigaction() 解决了在某些平台上需要再度安装信号的问题)