C语言 - 直接从键盘缓冲区读取数据

4

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

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

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

我需要它用于我们学院目前正在开发的操作系统。它叫做ICS-OS,我不太确定具体情况。它运行在x86、32位机器上(我们在Linux箱中使用QEMU运行它)。下面是Google Code的链接:http://code.google.com/p/ics-os/。希望这足够了解。

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


2
哪个操作系统?这会有很大的区别。 - Hannesh
1
据我所知,直接读取字符/按键(不需要在它们之间按回车键)并不是跨平台的,因此您需要明确支持哪个操作系统。 - xod
4个回答

9

这真的取决于平台。

如果是针对Windows,最直接访问“键盘缓冲区”的方法是使用WM_INPUT和GetRawInputData。请参见使用原始输入,其中包括键盘和鼠标示例

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

可移植库称为Curses,并且适用于Linux和Windows。

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

最直接的跨平台方法是使用getchar/scanf或任何从标准输入读取数据的方式,但是标准输入是行缓冲的,因此只有在按下回车键后才能获取到数据。你可能可以更改缓冲设置,但这又涉及到平台依赖性,在某些平台上可能不可行。请参见相关讨论of setbuf(stdin,NULL)

1

你尝试过查看Linux内核的源代码以获取键盘驱动程序吗?请看一下/drivers/input/keyboard/xtkbd.*,这是一个简单的XT键盘驱动程序。

此外,这里有一篇文章简要介绍了如何完成这项工作。


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

1
你把标准输入和“键盘缓冲区”混淆了。 - Paul R

-4

这是从键盘缓冲区读取的内容

scanf("%d",&myvariable);

但是你必须使用"%d"表示整数,"%f"表示浮点数,%e表示双精度浮点数,"%c"表示字符,"%s"表示字符串来指定类型,这些类型必须与你的变量类型匹配。

3
我不确定这是否是原始问题的要求。这段代码从控制台读取输入。 - Hannesh
对不起,这不是我想要的。 - brain56
6
@Hannesh(以及其他标记该评论的3人),这并不是从控制台读取。它是从标准输入流(stdin)中读取的。有时,标准输入流会连接到控制台,但并不总是如此(而且可能更多情况下不是这样)。 - William Pursell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接