我正在使用 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/