C - 直接从键盘缓冲区读取

时间:2011-03-16 07:46:04

标签: c input keyboard buffer

这是C编程语言中的一个问题。

如何直接读取键盘缓冲区中的数据?

我想直接访问数据并将其存储在变量中。变量应该是什么数据类型?

我需要它用于我们学院目前正在开发的操作系统。它被称为ICS-OS,我不太确定具体细节。它运行在x86,32位机器上(我们在Linux机箱中的QEMU上运行)。以下是Google代码http://code.google.com/p/ics-os/的链接。我希望这足够了。

操作系统不支持conio.h库,所以kbhit不是一个选项。

4 个答案:

答案 0 :(得分:8)

这实际上取决于平台。

如果是Windows,则最直接访问“键盘缓冲区”的方法是使用WM_INPUT和GetRawInputData。请见Using raw inputexample for both keyboard and mouse

另一种DOS / Windows特定方式是conio.h函数getch()/ kbhit()。

便携式库名为Curses,并且具有Linux和Windows的端口。

但是,由于您的目标是非常具体的操作系统,因此您需要检查该操作系统的文档。

最直接的平台无关方式是getchar / scanf /从stdin读取的任何东西,但是stdin是行缓冲的,因此在按下enter之前你不会得到任何数据。您可以更改缓冲设置,但同样,这取决于平台,在某些平台上可能无法实现。请参阅相关讨论of setbuf(stdin,NULL)

答案 1 :(得分:1)

您是否尝试过查看Linux内核的源代码以获取键盘驱动程序? 请查看/drivers/input/keyboard/xtkbd.*以获取简单的 XT键盘驱动程序。

此外,here's an article简要说明了它是如何完成的。

答案 2 :(得分:-1)

如果你想直接从键盘缓冲区读取数据,那么你可以使用getchar或getc!

答案 3 :(得分:-3)

从键盘缓冲区中读取

scanf("%d",&myvariable);

但你必须使用 “%d”表示int,“%f”表示浮点数,%e表示double,“%c”表示char,“%s”表示字符串表示必须匹配变量类型的标识类型。