检测C中的上下箭头键

检测C中的上下箭头键,c,terminal,C,Terminal,我是C编程的初学者,我正在构建一个命令行解释器。我正在使用fgets()从终端获取用户输入,并尝试使用箭头键创建命令的“历史记录” void receiveInput() { char *input = malloc(256); printf(">> "); fgets(input, 256, stdin); if ((strlen(input) > 0) && (input[strlen(input) - 1] == '\n'))

我是C编程的初学者,我正在构建一个命令行解释器。我正在使用
fgets()
从终端获取用户输入,并尝试使用箭头键创建命令的“历史记录”

void receiveInput() {
  char *input = malloc(256);

  printf(">> ");
  fgets(input, 256, stdin);
  if ((strlen(input) > 0) &&
      (input[strlen(input) - 1] == '\n')) {
      input[strlen(input) - 1] = '\0';
  }
  processInput(input);
  free(input);
  receiveInput();
}

上面的函数构建输入,问题是我必须在尝试获取用户输入的同时捕捉按键。有没有办法做到这一点?我已经找到了一些我试图理解的解决方案,但在这个层次上,它们似乎对我来说太难了

实现这一点的简单方法是使用GNU Readline库(或其BSD等价物Editline库)。另请注意,与Scheme不同,对
receiveInput
的尾部调用可能会耗尽C中的堆栈。请看一下哪些已为历史提供了接口。键盘是操作系统特有的东西,因此如何读取它们将取决于您是在运行Windows、Mac还是Linux。是否还有其他方法,就像一个可以帮助我不使用图书馆的变通方法@LeeDanielCrocker我正在使用Linux。Linux使用终端,通常为字符I/O设置。如果要检测键盘事件,必须将终端置于特殊模式并使用IOCTL等。“curses”(和ncurses)库通常用于使这更容易和更可移植。