gpt4 book ai didi

c - 在 ncurses 中处理信号

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:54 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com