2011-03-16 78 views
4

这是C编程语言中的一个问题。C - 直接从键盘缓冲区中读取

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

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

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

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

+2

哪个操作系统?这会产生很大的差异 – Hannesh 2011-03-16 07:49:08

+1

IIRC,直接读取字符/按键(无需在两者之间按回车)不是平台无关的,因此您必须阐明应该支持哪种操作系统。 – xod 2011-03-16 07:50:09

+2

[有没有一种方法可以直接从标准C++的键盘读取输入?](http://stackoverflow.com/questions/902780/is-there-a-way-to-read-input-directly-从键盘在标准C)这是一个可能的复制[从标准输入捕获字符,而不必等待输入被按下](http:// stackoverflow。com/questions/421860 /) – Suma 2011-03-16 08:52:14

回答

-3

这是从键盘缓冲区

scanf("%d",&myvariable); 

读取,但你必须使用 “%d” 为整型, “%F” 浮法,%E双, “%C” 的字符,“ %s“字符串来标识必须匹配变量类型的类型。

+3

我不确定这是OP想要的。这从控制台读取输入。 – Hannesh 2011-03-16 08:23:35

+0

是的,这不是我要求的,对不起。 – brain56 2011-03-17 12:50:28

+5

@Hannesh(以及其他3位标记注释的人)这不会从控制台读取。它从标准输入读取。有时,标准输入连接到控制台,但并非总是如此。 (并且可能更多的时候不是。) – 2011-03-17 16:57:50

-1

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

+1

你在使用“键盘缓冲区”来混淆stdin。 – 2011-03-16 08:53:17

8

这实际上取决于平台。

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

1

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

另外,here's an article它简要地解释了它是如何完成的。