C - читать прямо из буфера клавиатуры - PullRequest
4 голосов
/ 16 марта 2011

Это вопрос на языке программирования C.

Как я могу непосредственно прочитать данные в буфере клавиатуры?

Я хочу получить прямой доступ к данным и сохранить их в переменной,Какого типа должна быть переменная?

Она мне нужна для операционной системы, которую в настоящее время разрабатывает наш институт.Это называется ICS-OS, и я не совсем уверен в специфике.Он работает на 32-разрядных компьютерах x86 (мы запускаем его на QEMU в Linux-системе).Вот ссылка для Google Code http://code.google.com/p/ics-os/. Надеюсь, этого достаточно.

Операционная система не поддерживает библиотеку conio.h, поэтому kbhit не поддерживается.

Ответы [ 4 ]

8 голосов
/ 16 марта 2011

Это действительно зависит от платформы.

Если это для Windows, самый прямой доступ к «буферу клавиатуры» использует WM_INPUT и GetRawInputData.См. Использование необработанного ввода с примером для клавиатуры и мыши .

Другим специфическим способом для DOS / Windows являются conio.h функции getch ()/ kbhit ().

Переносимая библиотека называется Curses и имеет порты как для Linux, так и для Windows.

Однако, поскольку вы ориентируетесь на довольно специфические ОС, вам необходимопроверьте документы для этой ОС.

Наиболее прямой независимый от платформы способ - это getchar / scanf / что-либо, что читает из stdin, но stdin буферизуется строкой, поэтому выне получит никаких данных, пока не будет нажата кнопка ввода.Вы можете изменить настройки буферизации, но, опять же, это зависит от платформы и может оказаться невозможным на некоторых платформах.См. Соответствующее обсуждение setbuf (stdin, NULL) .

1 голос
/ 17 марта 2011

Вы пытались посмотреть на исходный код ядра Linux для драйвера клавиатуры?Взгляните на /drivers/input/keyboard/xtkbd.* для простой XT клавиатуры драйвера.

Кроме того, вот статья , в которой кратко объясняется, как это делается.

0 голосов
/ 16 марта 2011

Если вы хотите напрямую читать данные из буфера клавиатуры, вы можете использовать getchar или getc!

0 голосов
/ 16 марта 2011

Это чтение из буфера клавиатуры

scanf("%d",&myvariable);

, но вы должны использовать "% d" для int, "% f" для float,% e для double, "% c" для char "% s "для строк, идентифицирующих тип, который должен соответствовать типу вашей переменной.

...