링크 ux C 키보드 정보 가 져 오기

10482 단어 C
1. Input 서브 시스템 을 이용 하여 정 보 를 얻 습 니 다. 다음 명령 을 통 해 키보드 에 대응 하 는 이벤트 id 를 얻 습 니 다.
cat /proc/bus/input/devices

제 컴퓨터 는 이벤트 4 에 대응 합 니 다. 실현 코드 는 다음 과 같 습 니 다.
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define INPUT_KEYBOARD "/dev/input/event4"

int get_key_board_from_input()
{
    int fd = -1, ret = -1;
    struct input_event ev;

    fd = open(INPUT_KEYBOARD , O_RDONLY);
    if(fd < 0) {
        printf("open failed, error:%d
"
, errno); return -1; } while(1) { memset(&ev, 0, sizeof(struct input_event)); ret = read(fd, &ev, sizeof(struct input_event)); if (ret != sizeof(struct input_event)) { printf("read error, ret: %d
"
, ret); break; } if (ev.type == EV_KEY) { printf("--------------------
"
); printf("type = %u.
"
, ev.type); /* ,EV_KEY */ printf("code = %u.
"
, ev.code); /* ,/usr/include/linux/input-event-codes.h , KEY_ESC esc */ printf("value = %u.
"
, ev.value); /* ,0 、1 、2 */ } } close(fd); return ret; }

이 방법 은 버튼 의 정 보 를 전면적으로 얻 을 수 있 지만 루트 권한 이 필요 합 니 다.
2. 콘 솔 설정 변경 을 통 해 키보드 값 ASCII 코드 가 져 오기
#include 
#include 
#include 

int get_key_board_from_termios()
{
    int key_value;
    struct termios new_config;
    struct termios old_config;

    tcgetattr(0, &old_config);
    new_config = old_config;
    new_config.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(0, TCSANOW, &new_config);

    key_value = getchar();

    tcsetattr(0, TCSANOW, &old_config);

    printf("key_value: %d
"
, key_value); return 0; }

루트 권한 없 이 실행 가능

좋은 웹페이지 즐겨찾기