LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 712|回复: 9

请问如何恢复信号处理动作为默认?(那们兄弟能不能将GNU C的函数库结构讲一下)

[复制链接]
发表于 2005-1-9 23:36:36 | 显示全部楼层 |阅读模式
在FC3中,我的一个测试程序,中间调用了signal函数,我对SIGINT(ctrl-c)指定了一个动作,但是第二次我按下ctrl-c时怎么没有恢复,书上说用signal(SIGINT,SIG_DEL)就可以恢复了,我试了一下不行的,看头文件,又有些迷茫.请问如何解决呢?

谢谢先.

附再问,那位兄弟能给我说一下CNU C的函数库结构.
发表于 2005-1-10 01:20:16 | 显示全部楼层
要显式的恢复把,试一下就知道了。

#include <signal.h>
#include <unistd.h>
#include <stdio.h>

void (*oldsig)(int);

void sig_int(int sig)
{
printf("Receive signal: %d\n", sig);
signal(sig, oldsig);
}

int main(void)
{
oldsig = signal(SIGINT, sig_int);
for (;;) sleep(1);
return 0;
}
 楼主| 发表于 2005-1-10 02:52:26 | 显示全部楼层
void (*oldsig)(int);


请问这是一种什么声明格式,能不能给我详说一下呢?
 楼主| 发表于 2005-1-10 03:09:19 | 显示全部楼层
是不是oldsig是一个函数指针,我用别的名字替换了一下,试试也行,于是我就不明白这个东西是做什么用的了?是一个空函数吗?
发表于 2005-1-10 10:30:47 | 显示全部楼层
man 了一个signal。。。
“The signal() function returns the previous value of the signal handler,”
所以,我想用signal(sig, &sig_int);也可以吧。
发表于 2005-1-10 11:39:03 | 显示全部楼层
我可能会错意了,楼主是不是想一直截获SIGINT,然后自己处理??
 楼主| 发表于 2005-1-10 13:56:53 | 显示全部楼层
我主是要想在第一截获后,进行相关处理,再在第二次操作时恢得到原先的默认操作,即按下ctrl-c时退出.
发表于 2005-1-10 14:05:19 | 显示全部楼层
这样的话,二楼兄弟的办法就可以啊,当然也可以在sig_int()里用一下
signal(sig, SIG_DFL);
恢复成默认也可以的。
 楼主| 发表于 2005-1-10 14:29:12 | 显示全部楼层
谢谢了,书中给出的是signal(sig,SIG_DEL);总是编译不成功,结果也许是DFL,对了,这些宏都是在SINGAL.H中声明的吗?大哥能不能帮我说一下GNU C库函数的结构,谢谢先!!!
发表于 2005-1-11 19:13:25 | 显示全部楼层
这和c库函数没有关系,而是需要去看看《UNIX环境高级编程》。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表