Как я могу понять, что пользователь нажал какое ключевое слово? - PullRequest
1 голос
/ 02 декабря 2009

Я кодирую терминал, такой как терминал Linux, с C под ОС Linux, и мне нужно выйти из программы, когда пользователь нажимает ключевые слова ctrl + D. Но я не знаю, как понять, что пользователь нажал эти ключевые слова. Спасибо за вашу помощь.

Я получаю ввод с помощью fgets ()

Ответы [ 2 ]

3 голосов
/ 02 декабря 2009

Ctrl + D - конец файла. В этом случае fgets() вернет нулевой указатель.

Итак, основной цикл вашей программы может выглядеть примерно так:

char buffer[2000];
const char* input = fgets(buffer, sizeof(buffer), stdin);
while (input) {
    do_something_with(input);
    input = fgets(buffer, sizeof(buffer), stdin);
}

Обратите внимание, что это работает только для простого буферизованного ввода. Для получения информации о работе с клавиатурой более низкого уровня, проверьте http://tldp.org/HOWTO/Keyboard-and-Console-HOWTO.html

2 голосов
/ 02 декабря 2009

Вот небольшой пример того, как читать отдельные нажатия клавиш с клавиатуры терминала:

#include <stdio.h>
#include <termios.h> 
#include <unistd.h> 

int main(void){
  struct termios save,raw;
  tcgetattr(0,&save);
  cfmakeraw(&raw); tcsetattr(0,TCSANOW,&raw);
  unsigned char ch;
  do{
    read(0,&ch,1);
    if( ch<32 ) printf("read: Ctrl+%c (%i)\r\n",ch+'@',ch);
    else        printf("read: '%c' (%i)\r\n",ch,ch);
  }while(ch!='q');
  tcsetattr(0,TCSANOW,&save);
}

Лучше знать, как терминал отправляет нажатия клавиш, прежде чем начать использовать ncurses для обработки ввода-вывода терминала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...