【发布时间】:2021-11-02 17:54:46
【问题描述】:
我创建了一个数字时钟程序。我用这个cmd
printf("\033[?25l");
// Hiding the cursor
但是当我用 Ctrl+C 停止程序时 终端光标仍然隐藏。 我该如何解决这个问题 并在Ctrl+C后恢复光标?
【问题讨论】:
-
编写一个信号处理程序以在输入 ctrl-c 时取消隐藏光标。请注意,仅应在信号处理程序中调用async safe functions,而
printf不是其中之一。所以你需要要么使用write,要么设置一个变量,让主程序执行printf。 -
另一种方法是不隐藏光标,而是将其定位在不太明显的地方,例如在框架的右下角。
-
这能回答你的问题吗? Catch Ctrl-C in C
-
您还应该在按下
Ctrl-Z时取消隐藏它(即同时捕捉SIGTSTP)并在SIGCONT上隐藏它。并且还处理SIGTERM,类似于SIGINT。可以使用printf("\033[...")来了解事情的运作方式,但一般来说,最好使用curses,这将为您完成所有这些工作,并注意为您的终端使用正确的转义