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

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

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

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

我需要它用于我们研究所正在开发的操作系统。 它被称为ICS-OS,我不太清楚具体细节。 它运行在x86,32位机器上(我们在Linux机器上的QEMU上运行它)。 以下是Google Code http://code.google.com/p/ics-os/的链接。 我希望这些信息足够充分。

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

这实际上取决于平台。

如果这是针对Windows的,则最直接访问“键盘缓冲区”的方法是使用WM_INPUT和GetRawInputData。 有关键盘和鼠标的信息,请参阅使用原始输入和示例 。

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

可移植库称为Curses ,具有Linux和Windows的端口。

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

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

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

此外, 这篇文章简要介绍了它是如何完成的。

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

这是从键盘缓冲区读取的

 scanf("%d",&myvariable); 

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