读书人

linux中signal()调用的有关问题

发布时间: 2012-08-15 16:57:17 作者: rapoo

linux中signal()调用的问题
刚测试的一代码:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void ouch(int sig)
{
printf("------ouch()-----\n");

}
void inch(int sig)
{
printf("------inch()-----\n");
(void) signal(SIGINT, SIG_DFL);
}

int main()
{
(void) signal(SIGINT, ouch);
(void) signal(SIGINT, inch);

while(1)
{
printf("--------------\n");
sleep(1);
}

return 0;
}
运行结果:
--------------
--------------
^C------inch()-----
--------------
--------------
^C
为什么只执行了inch()而没执行ouch()呢,而且main()中的signal()已经捕获了信号SIGINT,inch()里的signal调用怎么还能处理它

[解决办法]
先设置为ouch,然后又设为inch,当然是执行inch了。然后设为默认,SIGINT得默认就是终止程序。
[解决办法]
signal函数其实就设置一下函数指针,再把旧的返回出来。所以
(void) signal(SIGINT, ouch);//白干活
(void) signal(SIGINT, inch);
(void) signal(SIGINT, SIG_DFL);//设置回调指针为0,也就是不在回调。

你理解错了。

读书人网 >C语言

热点推荐