在linux C中获取按键

时间:2016-01-20 21:42:15

标签: c linux

我试图识别用户按下的键。如果用户正在按下' UP'键。我这样做是为了进一步执行命令历史记录。这个getKey()代码不是我的功能,我在某个地方找到它,它应该有效吗?因为无论什么时候我按下' UP'关键没有任何反应。

int getKey(){
int character;
struct termios orig_term_attr;
struct termios new_term_attr;

tcgetattr(fileno(stdin), &orig_term_attr);
memcpy(&new_term_attr, &orig_term_attr, sizeof(struct termios));
new_term_attr.c_lflag &= ~(ECHO|ICANON);
new_term_attr.c_cc[VTIME] = 0;
new_term_attr.c_cc[VMIN] = 0;
tcsetattr(fileno(stdin), TCSANOW, &new_term_attr);

character = fgetc(stdin);

tcsetattr(fileno(stdin), TCSANOW, &orig_term_attr);

return character;
}

int main(int argc, char *argv[]){

char cmd[500];
int key;

do{
    printf("$ > ");
    fgets(cmd, 499, stdin);
    trim(cmd);
    key = getKey();

    if(key == 0x17C){
        break;
    }

    if(starts_with(cmd, "./")){
        execute_external_command(cmd);
    }else{
        execute_internal_command(cmd);
    }


}while(strcmp(cmd, "exit") != 0);

return 0;
}

1 个答案:

答案 0 :(得分:1)

这很棘手。您应该阅读tty - s,尤其是TTY demystified。在line discipline中了解内核的作用。

我建议使用GNU readline(它有历史记录和自动完成功能!)或GNU ncurses库(否则,如果在X11下运行GUI应用程序,代码在Qt或{{ 3}})。否则,请深入了解书籍(例如GTK),解释tty(及其原始和熟食模式)的详细信息,并查看Advanced Linux Programming& termios(3)开始。