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

标签 c input keyboard buffer

这是一道C语言的题。

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

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

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

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

最佳答案

这确实取决于平台。

如果这是针对 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) .

关于C - 直接从键盘缓冲区读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5322340/

相关文章:

c - WIndows系统编程使用标准C库

c - VB6 - 使用 C/C++ dll 时出现运行时错误 48

c - 从输入中获取内存地址。 C

c - 使用 sscanf 读取字符串

html 输入按钮样式 CSS3

ios - 以编程方式添加文本替换

android - 没有 EditText 和检测按键的软键盘

windows - 使用命令行更改键盘输入

c - 如何在C语言中删除二叉搜索树中的一级节点?

c - 在函数 'print_usage' : error: expected ')' before 'PROGRAM' 中