如何防止c中转义字符的回显

时间:2014-07-17 10:36:34

标签: c linux escaping echo

基本上,我想使用getchar()扫描输入,我希望如果用户输入像ESC或箭头键这样的字符,这根本不应该在屏幕上回显,但我仍然希望输入到被处理。

2 个答案:

答案 0 :(得分:0)

见ascii(7)的人:

Oct   Dec   Hex   Char
...
033   27    1B    ESC (escape)

这是转义字符的代码。

答案 1 :(得分:0)

让你入门的东西。基本上你需要关闭ECHO并将终端设置为无缓冲模式。然后,您必须过滤ANSI转义序列。这些是ESC(27),后跟[和一封信。下面的示例已经在OS X中进行了测试,但可能应该在Linux中运行。

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

int main(int argc, char **argv)
{
  int c,escseen=0,code;
  struct termios t;
  tcgetattr(0, &t);
  t.c_lflag &= ~(ECHO|ICANON);
  tcsetattr(0, TCSANOW, &t);


  for(;;)
  {
    c=getchar();
    if(c>=32)
    {
        if(escseen)
            if(c=='[')
            {
                code=getchar();
                /* do something with the esc code */
                continue;
            }

        putchar(c);
        escseen=0;
    }
    else
        if(c==27)
        {
          escseen=1;
        }
  }
}