在C中按向上箭头键时,如何立即采取措施?

时间:2018-02-02 07:41:18

标签: c

我正在Linux平台上编写一个C程序,我需要在按下向上或向下箭头键的情况下立即在控制台上显示某些内容,而不是^[[A^[[B在控制台上写入然后按下输入以在控制台上显示内容。

我正在模拟linux shell,我希望像历史功能一样阻止linux shell,当我们按下向上和向下键时,会显示最近输入的命令。我正在使用GNU历史库来实现这一点。我怎么做?

1 个答案:

答案 0 :(得分:1)

我们可以编写自己的函数来获取char,如禁用echo标志,读取字符并再次启用echo标志。所以你可以在控制台上看到打印。

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

int getch();

int main(int argc, char **argv) {
   int ch;
   for (;;) {
      ch = getch();
      if(ch == 27)
         printf("UP arrow\n");
      else if(ch ==28)
         printf("down arrow\n");
      else
         printf("wrong input \n");

      break;
   }
   return 0;
}

int getch() {
   struct termios oldtc;
   struct termios newtc;
   int ch;
   tcgetattr(STDIN_FILENO, &oldtc);
   newtc = oldtc;
   newtc.c_lflag &= ~(ICANON | ECHO);
   tcsetattr(STDIN_FILENO, TCSANOW, &newtc);
   ch=getchar();
   tcsetattr(STDIN_FILENO, TCSANOW, &oldtc);
   return ch;
}