2014-02-09 5 views
1

Просто пытайтесь понять. Я пишу небольшую программу, которая будет читаться в событии нажатия клавиши с клавиатуры и запускать определенные события (с помощью оператора switch). Я делаю некоторые предположения и пытаюсь обрабатывать клавиатуру, как txt-файл для чтения.Использование системных вызовов в C для чтения событий клавиатуры

Я как бы растерялся относительно простейшего способа сделать это.

Что я хочу сделать, откройте файл (клавиатура event4) и используйте что-то вроде fgets, чтобы прочитать его в символе символом в бесконечном цикле while, а затем используйте оператор switch, чтобы выйти из цикла и выйти.

Где я застрял в том, что это системные вызовы, и я в основном не уверен, как с ними справиться.

Код ниже определенно не будет компилироваться, просто поместив его туда как грубую демонстрацию того, что я пытаюсь сделать.

#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 

int main(void) 
{ 
    // errors on opening 
    int fd = open("/dev/input/event4", O_RDONLY); 
    if(fd < 0) 
    { 
     printf("error while opening/n"); 
     return 1; 
    } 

    int keystroke = 0; 

    while (1) 
    { 
     keystroke = fgetsc(fd); 

     switch(keystroke) 
     { 
      case '1' : 
       break; 
      case '2' : 
       break; 
      case '3' : 
       break; 
      default: 
       printf("waiting for 1, 2, 3/n"); 
      } 

    close(fd); 
    return 0; 
} 
+0

Почему бы не использовать 'read (0, ...)' для чтения 'stdin'? – Ilmirus

ответ

1

1) Чтение «исходный ввод с клавиатуры» обычно зависит от ОС. API и методы могут сильно варьироваться в зависимости от того, например, вы работаете с Windows vs Linux.

2) Похоже, вы используете вариант * nix (например, Linux или MacOS). Если вы хотите сделать все «грандж» себя, вот большой «HowTo»:

3) Вам нужно поставить устройство клавиатуры в «сырой», «небуферизован ", чтобы читать нажатия клавиш. Среди прочего ...

4) Я бы рекомендовал вам использовать библиотеку более высокого уровня, такую ​​как ncurses или SDL.

'Надеюсь, что это поможет!

+0

извинения, я использую ubuntu linux. Я прочитаю это. Часть проблемы - я просто не уверен, что найду информацию. Спасибо за ссылку. Я предполагаю, что гранж - это работа? :) – user3287789

+0

Это не * что * много работы;) Но да, вот что я имел в виду. Надеюсь, ссылки помогут. И я также рекомендую вам взглянуть на библиотеки, которые могут облегчить вам жизнь: например, ncurses (например, для меню текстового режима) или SDL (например, для игр). Или более высокоуровневые графические инструменты, такие как GTK2 или Qt. IMHO ... – FoggyDay

+0

Я немного потружусь с ncurses и прочитаю файл, который вы мне показали. – user3287789

Смежные вопросы