编写一个按下 Ctrl+C 时不会终止的 C 程序

在本节中,我们将看到如何用 C 编写一个不能被 Ctrl + C 键终止的程序。

Ctrl + C 产生键盘中断,并停止当前进程的执行。在这里,当我们按下 Ctrl + C 键时,它会打印一条消息然后继续执行。要使用此功能,我们将使用 C 中的信号处理技术。当按下 Ctrl + C 时,它会生成 SIGINT 信号。以下列表中还有一些其他信号及其功能。

信号
描述
SIGABRT
表示异常终止
SIGFPE 
表示浮点异常
SIGILL 
指示无效指令。
SIGINT 
表示发送到程序的交互式注意请求。
SIGSEGV 
表示无效的内存访问。
SIGTERM 
表示发送给程序的终止请求。

这里我们将使用标准的 C 库函数signal()来处理这些信号。

示例代码

#include <stdio.h>
#include <signal.h>
void sigint_handler(int signum) { //SIGINT 处理程序
   //重置处理程序以在下次捕获 SIGINT。
   signal(SIGINT, sigint_handler);
   printf("Cannot be stopped using Ctrl+C \n");
   fflush(stdout);
}
main () {
   signal(SIGINT, sigint_handler);
   while(1) { //创建无限循环
   }
}
输出结果
Cannot be stopped using Ctrl+C
Cannot be stopped using Ctrl+C