Я пытаюсь распознать нажатый пользователем ключ. Я не остановлю программу, если пользователь нажимает клавишу «ВВЕРХ». Я делаю это для дальнейшей реализации истории команд. Этот код getKey()
не является моей функцией, я нашел его здесь где-нибудь, должен ли он работать? Потому что всякий раз, когда я нажимаю клавишу «ВВЕРХ», ничего не происходит.Получить нажатый ключ в linux C
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;
}
Почему вы не нашли время, чтобы понять, что делает функция и правильно ли она работает? Вам не интересно учиться? –
Меня не интересует C, но у меня есть школьный проект, поэтому мне нужно это сделать. –
Мне очень жаль вас, если вас не интересует самый красивый и мощный язык для всех. Это как не интересно изучать английский, если вы не являетесь носителем английского языка. –