我有这样的代码:
int main()
{
int x=0;
std::cout<<"Enter numbers"<<std::endl;
while(std::cin>>x)
{
std::cout<<"Number entered: "<<x<<std::endl;
}
return 0;
}
当我按ctrl+c
时,代码被终止。我想打印类似'程序终止因为ctrl+c
被按下了。我知道异常处理是一种方式。但还有其他选择吗?顺便说一下,我在linux上运行。
答案 0 :(得分:1)
不,异常处理与它无关。
您需要使用sigaction(2)为SIGINT
信号安装信号处理程序。请注意,信号处理是异步的,并且大多数C ++库类和函数都不是可重入的,因此只要它能做什么,您的信号处理程序就相当有限。它无法触及std::cout
,它无法做多少。关于它可以安全地做的唯一事情是使用write系统调用将标准输出中的预制消息写入标准输出,然后以_exit()
结束。
可以使用特定于Linux的信号文件描述符以安全的方式处理信号,允许使用C ++库
答案 1 :(得分:0)
在linux中你可以捕获SIGINT信号(当你按CTRL + C时会发出这个信号),一个例子:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
/* procedure signal SIGINT */
static void sigint_handler (int signo)
{
printf ("signal SIGINT!\n");
exit (EXIT_SUCCESS);
}
int main (void)
{
if (signal (SIGINT, sigint_handler) == SIG_ERR)
{
fprintf (stderr, "Error in SIGINT!\n");
exit (EXIT_FAILURE);
}
for (;;)
pause ( );
return 0;
}