这个下面的语句是做什么用的?如果有人能解释一下这个函数,我会非常感激。
signal(SIGINT, SIG_DFL);
SIGINT
是中断信号,当您按下 Ctrl+C 时会触发。它的默认行为是终止进程。可以对 SIGINT
信号进行处理,这意味着可以更改默认行为(通过调用 sighandler
或将其设置为 SIG_IGN
)。
现在,一旦更改了操作并且您想要再次设置此信号的默认行为,则应编写
signal(SIGINT, SIG_DFL);
它将再次更改信号的默认行为(即终止进程)。
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);
}
man signal
来获取类似这样的答案。那里(也许是在“另请参阅”下列出的一些页面上)还会告诉您什么是信号。它设置了SIGINT的默认操作,如下所述;
来自Linux信号手册;
sighandler_t signal(int signum, sighandler_t handler);
signal()函数将信号signum的处理方式设置为handler,handler可以是SIG_IGN、SIG_DFL或程序员定义的函数的地址。