【问题标题】:C - Read Directly From the Keyboard BufferC - 直接从键盘缓冲区读取
【发布时间】:2011-07-16 09:25:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: c input keyboard buffer


【解决方案1】:

这真的取决于平台。

如果这是针对 Windows,对“键盘缓冲区”的最直接访问是使用 WM_INPUT 和 GetRawInputData。请参阅Using raw inputexample for both keyboard and mouse

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

便携式库名为Curses,具有适用于 Linux 和 Windows 的端口。

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

最直接的平台无关方式是getchar / scanf / 从标准输入读取的任何内容,但标准输入是行缓冲的,因此在按下输入之前您将不会获得任何数据。您也许可以更改缓冲设置,但同样,这取决于平台,在某些平台上可能无法实现。查看相关讨论of setbuf(stdin,NULL)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您将标准输入与“键盘缓冲区”混淆了。
      【解决方案4】:

      这是从键盘缓冲区读取的

      scanf("%d",&myvariable);
      

      但你必须使用 "%d" for int ,"%f" for float ,%e for double ,"%c" for char ,"%s" for strings to identifing type which has to match your variable.

      【讨论】:

      • 我不确定这是否是 OP 想要的。这会从控制台读取输入。
      • 是的,这不是我想要的,抱歉。
      • @Hannesh(以及其他 3 个标记评论的人)这确实 NOT 从控制台读取。它从标准输入读取。有时,标准输入会附加到控制台,但并非总是如此。 (而且可能更多时候不会。)
      猜你喜欢
      • 2018-03-05
      • 2022-07-16
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多