2014-02-09 2 views
1

그냥 이해하려고 노력합니다. 키보드에서 키 입력 이벤트를 읽고 작은 이벤트를 트리거하는 작은 프로그램을 작성하고 있습니다 (switch 문 사용). 나는 몇 가지 가정을하고 키보드를 txt 파일처럼 취급하여 읽기를 시도하고있다.C에서 시스템 호출을 사용하여 키보드 이벤트 읽기

저는이 작업을 수행하는 가장 간단한 방법은별로 없습니다.

무엇을하고 싶은가요 (키보드 event4) 파일을 열고 무한 while 루프에서 문자로 문자를 읽으려면 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

'stdin'을 읽기 위해'read (0, ...)'을 쓰지 않는 이유는 무엇입니까? – Ilmirus

답변

1

1) "원시 키보드 입력"은 일반적으로 OS 의존적입니다. API와 기술은 Windows와 Linux의 경우에 따라 크게 다를 수 있습니다.

2) 당신이 * nix 변형 (예 : Linux 또는 MacOS)을 사용하고있는 것처럼 들립니다. 당신이 자신을 모든 "지"를 수행하려는 경우, 여기에 좋은 "하우투"입니다 :

3) 당신은, "원시" "언 버퍼로 키보드 장치를 넣어해야합니다 "모드에서 키 입력을 읽습니다. 무엇보다도 ...

4) 그러나 ncurses 또는 SDL과 같은 상위 수준 라이브러리를 활용하는 것이 좋습니다.

'도움이 되길 바랍니다!

+0

사과, 우분투 리눅스를 사용하고 있습니다. 나는 그 하우투를 읽을거야. 문제의 일부는 정보를 찾지 못하는 것입니다. 링크를 가져 주셔서 감사합니다. 나는 그게 일이라고 추측하고 있니? :) – user3287789

+0

그것은 * 많은 일을하지 않습니다;)하지만 그래, 그게 무슨 뜻인지. 바라건대 링크가 도움이되기를 바랍니다. 또한 ncurses (예 : '텍스트 모드 메뉴'의 경우) 또는 SDL (예 : 게임의 경우)과 같이 생활을 더 편하게 할 수있는 도서관을 살펴 보시기 바랍니다. 또는 GTK2 나 Qt와 같은 상위 수준의 GUI 툴킷. IMHO ... – FoggyDay

+0

나는 ncurses를 약간 엉망으로 만들었고 당신이 나에게 보여준 파일을 읽었습니다. – user3287789

관련 문제