我正在开发一个应用程序,使用C++语言编写,并使用Linux GNU C编译器进行编译。
我想在用户使用 Ctrl + C 快捷键中断脚本的同时调用一个函数。
我该怎么做?非常感谢任何答案。
我正在开发一个应用程序,使用C++语言编写,并使用Linux GNU C编译器进行编译。
我想在用户使用 Ctrl + C 快捷键中断脚本的同时调用一个函数。
我该怎么做?非常感谢任何答案。
signal
函数的简单示例。#include <stdio.h>
#include <stdlib.h>
#include <signal.h> // our new library
volatile sig_atomic_t flag = 0;
void my_function(int sig){ // can be called asynchronously
flag = 1; // set flag
}
int main(){
// Register signals
signal(SIGINT, my_function);
// ^ ^
// Which-Signal |-- which user defined function registered
while(1)
if(flag){ // my action when signal set it 1
printf("\n Signal caught!\n");
printf("\n default action it not termination!\n");
flag = 0;
}
return 0;
}
SIGINT
信号。按下CtrlC通常会使Shell向您的程序发送SIGINT
信号。通过signal(2)
或sigaction(2)
添加处理程序,您可以在按下CtrlC时进行任何你想做的事情。
或者,如果您只关心在程序退出之前执行清理操作,则可以通过atexit(3)
设置退出处理程序更为适当。
atexit()
不是一种替代方案,因为以这种方式注册的函数在由信号导致的程序退出时不会被调用。 - Emanuel P#include <signal.h>
#include <stdio.h>
void sigint(int a)
{
printf("^C caught\n");
}
int main()
{
signal(SIGINT, sigint);
for (;;) {}
}
示例输出:
Ethans-MacBook-Pro:~ phyrrus9$ ./a.out
^C^C caught
^C^C caught
^C^C caught
^C^C caught
^C^C caught