如何打印此程序的终止?

时间:2016-08-12 00:51:13

标签: c++

我有这样的代码:

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上运行。

2 个答案:

答案 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;
}