【发布时间】:2014-03-18 07:37:15
【问题描述】:
我已经注册了一个打印信号编号的处理程序,然后将原始函数调用到SIGINT。
#include <stdio.h>
#include <signal.h>
void (*orifunc)(int);
void func(int sig) {
printf("signal number is %d. \n", sig);
orifunc(sig);
return;
}
int main() {
orifunc = signal(SIGINT, func);
while (1);
return 0;
}
但是当我运行时,在执行printf 之后,它返回了“分段错误:11”。
为什么会这样?
因为SIG_DFL 不是一个真正的函数。我尝试这样编写代码:
#include <stdio.h>
#include <signal.h>
void func(int sig) {
printf("signal number is %d. \n", sig);
signal(SIGINT, SIG_DFL);
raise(sig);
signal(SIGINT, func);
return;
}
int main() {
signal(SIGINT, func);
while (1);
return 0;
}
然后它运行func递归并在整个屏幕上打印字符串。
如何正确运行我的处理程序中的默认处理程序?
【问题讨论】:
-
orifunc()的值是多少? -
我认为它会是 'SIG_DFL'。