2011-03-16 74 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它簡要地解釋了它是如何完成的。