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

📅  最后修改于: 2021-05-25 19:57:55             🧑  作者: Mango

编写一个在按下Ctrl + C时不会终止的C程序。它显示一条消息“无法使用Ctrl + c终止”并继续执行。

为此,我们可以在C中使用信号处理。当按下Ctrl + C时,将生成SIGINT信号,我们可以捕获该信号并运行定义的信号处理程序。 C标准在signal.h头文件中定义了以下6个信号。

SIGABRT –异常终止。
SIGFPE –浮点异常。
SIGILL –无效指令。
SIGINT –发送给程序的交互式关注请求。
SIGSEGV –无效的内存访问。
SIGTERM –发送到程序的终止请求。

指定了其他信号Unix和类似Unix的操作系统(例如Linux)定义了15种以上的其他信号。参见http://en.wikipedia.org/wiki/ Unix_signal#POSIX_signals
标准C库函数signal()可用于为上述任何信号设置处理程序。

/* A C program that does not terminate when Ctrl+C is pressed */
#include 
#include 
  
/* Signal Handler for SIGINT */
void sigintHandler(int sig_num)
{
    /* Reset handler to catch SIGINT next time.
       Refer http://en.cppreference.com/w/c/program/signal */
    signal(SIGINT, sigintHandler);
    printf("\n Cannot be terminated using Ctrl+C \n");
    fflush(stdout);
}
  
int main ()
{
    /* Set the SIGINT (Ctrl-C) signal handler to sigintHandler 
       Refer http://en.cppreference.com/w/c/program/signal */
    signal(SIGINT, sigintHandler);
  
    /* Infinite loop */
    while(1)
    {        
    }
    return 0;
}

输出:两次按Ctrl + C组合键时

Cannot be terminated using Ctrl+C
 
 Cannot be terminated using Ctrl+C
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”