下面的这个语句有什么作用?如果有人能解释这个功能,我将不胜感激。
signal(SIGINT, SIG_DFL);
SIGINT 是中断信号 (ctrl+C)。它的默认行为是终止进程。SIGINT 信号可以被释放,意味着可以改变默认行为(通过调用 sighandler,或者设置它 SIG_IGN) 现在一旦动作改变并且你想再次设置它这个信号的默认行为,那么你应该写
信号(SIGINT,SIG_DFL);
它将再次改变信号的默认行为。(即终止一个进程)
将 SIGINT 信号的处理设置为其默认值。
如果您在 *nix 系统上,请尝试man signal
获得这样的答案。那(也许检查“另见”下列出的一些页面)也会告诉你什么是信号。
至于默认值是什么——它将是“忽略它”、“终止程序”或“导致程序转储核心”之一。它取决于具体的信号,我不记得 SIGINT 的默认值,抱歉。
您编写的行将中断信号的信号处理程序更改回默认值
void myInterruptHandler (int signum) {
printf("You pressed ctrl+c, but I don't care\n");
}
int main(){
sighandler_t oldHandler = signal(SIGINT, myInterruptHandler);
while(true){
printf("Ctrl + C can't kill me!!\n");
sleep(1000);
}
//Change back to the old handler
signal(SIGINT, oldHandler);
//alternatively: signal(SIGINT, SIG_DFL);
}
它设置 SIGINT 的默认操作,如下面的手册页所述;
来自 Linux 信号手册页;
sighandler_t signal(int signum, sighandler_t handler);
signal() 函数将信号符号的处置设置为处理程序,它是 SIG_IGN、SIG_DFL 或程序员定义函数的地址。