c - 在 ncurses 中处理信号

标签 c signals ncurses sigint

我正在使用 ncurses 在 C 中编写程序。我正在尝试处理 CRTL C 信号。在我的代码中,这个信号被捕获并处理,但程序没有正确终止。这可能是我退出 ncurses 的方式吗?

//handle SIGINT signal
void handle_signal(int signal){

   if(signal == SIGINT){

      clear();
      mvprintw(3,3,"A SIGNAL WAS ENCOUNTERED");
      refresh();
      sleep(1/2);
      exit(0);

    } //close if statement 

}//close handle_signal() function

最佳答案

无需进一步研究:如果 curses 函数实际上是信号安全的,我会感到非常惊讶。通常最好的做法是让你的信号处理程序保持最小,理想情况下只是设置一个标志。所以,你应该这样解决你的问题:

static volatile sig_atomic_t interrupted = 0;

在你的信号处理程序中:

    if (signal == SIGINT)
    {
        interrupted = 1;
    }

主循环中的某处:

    if (interrupted)
    {
        clear();
        mvprintw(3,3,"A SIGNAL WAS ENCOUNTERED");
        refresh();
        sleep(1);
        endwin();
        exit(0);
    }

请注意您的代码没有在任何地方调用 endwin(),这是将终端恢复正常所必需的。

关于c - 在 ncurses 中处理信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084793/

相关文章:

c - (val1 > val2 > val3) 是 C 中的有效比较吗?

c++ - 处理导致核心转储的文件结束错误

c - pthread 中的信号处理

c++ - NCurses 中有获取窗口位置的函数吗?

python - 如何将IPython shell嵌入到使用curses模块的Python程序中?

c - 在C中的字符串char数组中搜索字符串

c - 如何捕获 Control+D 信号?

C - SIGALRM block getchar()

Python 诅咒 : Exiting a program fast

c - 基于 epoll 的服务器中的空闲连接超时