2014-02-09 38 views
1

試圖尋求理解。我正在編寫一個小程序,它將從鍵盤讀取按鍵事件,並觸發某些事件(使用switch語句)。我正在做一些假設,並試圖把鍵盤當作一個txt文件來讀取。在C中使用系統調用來讀取鍵盤事件

對於最簡單的方法來說,我有點不知所措。

我想要做的事情是打開文件(鍵盤event4),然後使用類似fgets的東西在無限循環中逐個字符地讀取它,然後使用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)閱讀「原始鍵盤輸入」通常取決於操作系統。例如,如果您使用Windows和Linux,則API和技術可能會有很大差異。

2)這聽起來像你在* nix變種(例如Linux或MacOS)。如果你想要做的所有「垃圾」自己,這裏是一個偉大的「HOWTO」:

3)你需要把鍵盤設備分爲「原始」,「無緩衝「模式以讀取按鍵。除其他外...

4)但是,我會鼓勵您利用更高級別的庫,如ncursesSDL

'希望有幫助!

+0

道歉,我使用Ubuntu的Linux。我會通讀該howto。部分問題是我只是不確定要找到信息。感謝您的鏈接。我假設垃圾是工作? :) – user3287789

+0

這不是*那麼多工作;)但是,這就是我的意思。希望鏈接幫助。我也鼓勵你看看可能會讓你的生活更輕鬆的庫:比如ncurses(例如「文本模式菜單」)或SDL(例如遊戲)。或者更高級別的GUI工具包,比如GTK2或Qt。恕我直言... – FoggyDay

+0

我會亂搞ncurses一點,並閱讀你給我看的文件。 – user3287789