signal 函数返回值的疑问
signal 函数的返回值man上说的是成功返回之前安装的函数指针,错误是SIG_ERR
我写了个小函数测试了一下,函数如下:
#include <stdio.h>
#include <signal.h>
dypedef void (*funtype)(int);
funtype sys_fun;
void fun(int sig){
printf("%d\n",sig);
sys_fun(sig);
}
int
main(int argc,const char **argv){
sys_fun = signal(SIGINT,fun);
while(1);
return 0;
}
这个函数没什么意义,就是当我执行的时候函数会死循环,当我按下键盘上的Ctrl + C的时候会向进程发送SIGINT信号,进程应该打印SIGINT宏对应的整形,也就是2,之后还是在死循环的。合适我试了试,它能打印一个2,可是之后就直接段错误了,这是为什么呢,等大神指教啊。
[解决办法]
之前看错了
sys_fun = signal(SIGINT,fun);
这个返回默认的系统处理函数SIG_DFL
SIG_DFL 定义为
#define SIG_DFL (void (*)())0
所以错误了,不应该这么写