如何在不停止C程序的情况下按下最后一个键?

时间:2009-10-03 09:38:50

标签: c linux command-line interface user-input

使用命令行界面编写应用程序,我想知道是否按下了F1或ESC或箭头键。这样做最简单的方法是什么?我想避免使用readline类型库。

这是一个特定于Linux的问题;该程序不是多线程的。

3 个答案:

答案 0 :(得分:5)

在C标准中无法做到这一点,但各种操作系统上的C实现通常都有一些扩展来实现这一点。

在Windows上,您可以使用getch()。在Linux和Unix上,看看这个问题:

Non-blocking getch(), ncurses

此外,这是C FAQ列表中“系统依赖关系”部分中的第一个问题:

19.1

答案 1 :(得分:2)

Linux的kbhit()实现在Beginning Linux Programming第167页中介绍。您可以在提供的链接上在线阅读。

编辑:我提到kbhit()因为它是在解决了与Linux相关的问题之前作为解决方案发布的。不幸的是,该解决方案已被删除,这是不幸的。原理是当kbhit()返回非零时,后续阻塞面向字符的读取调用将不会阻塞。这仅适用于面向字符的输入; getchar()和其他读取stdio的标准函数通常是面向行的,因此阻塞直到换行。

答案 2 :(得分:1)

多线程?