我在Linux环境中工作,我有一个C++程序,我想要的是当我用ctrl + c取消程序时我希望程序执行一个函数,关闭一些文件并打印一些sutff,有没有这样做的方法?谢谢.
signal()
在某些操作系统上可能会有危险,在Linux上也不赞成使用sigaction()
."信号与sigaction"
这是我最近遇到的一个例子("点击中断信号")并在我玩它的时候进行了修改.
#include#include #include #include struct sigaction old_action; void sigint_handler(int sig_no) { printf("CTRL-C pressed\n"); sigaction(SIGINT, &old_action, NULL); kill(0, SIGINT); } int main() { struct sigaction action; memset(&action, 0, sizeof(action)); action.sa_handler = &sigint_handler; sigaction(SIGINT, &action, &old_action); pause(); return 0; }
有关完整的工作示例,您可以尝试以下代码:
#include#include #include volatile bool STOP = false; void sigint_handler(int sig); int main() { signal(SIGINT, sigint_handler); while(true) { if (STOP) { break; } } return 0; } void sigint_handler(int sig) { printf("\nCTRL-C detected\n"); STOP = true; }
示例运行:
[user@host]$ ./a.out ^C CTRL-C detected