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

如何防止c中转义字符的回音,c,linux,escaping,echo,C,Linux,Escaping,Echo,基本上,我希望使用getchar()扫描输入,如果用户输入诸如ESC或箭头键之类的字符,这不应该在屏幕上出现,但我仍然希望处理该输入。请参阅man for ascii(7): 这是转义字符的代码。让您开始学习。基本上,您需要关闭ECHO并将终端设置为无缓冲模式。然后必须过滤ANSI转义序列。下面的例子已经在OSX中进行了测试,但可能在Linux中也可以使用 #include <termios.h> #include <stdio.h> int main(int argc

基本上,我希望使用getchar()扫描输入,如果用户输入诸如ESC或箭头键之类的字符,这不应该在屏幕上出现,但我仍然希望处理该输入。

请参阅man for ascii(7):


这是转义字符的代码。

让您开始学习。基本上,您需要关闭ECHO并将终端设置为无缓冲模式。然后必须过滤ANSI转义序列。下面的例子已经在OSX中进行了测试,但可能在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;
        }
  }
}
#包括
#包括
int main(int argc,字符**argv)
{
int c,escseen=0,代码;
结构术语t;
tcgetattr(0,&t);
t、 c|lflag&=~(ECHO | ICANON);
tcsetattr(0、TCSANOW和t);
对于(;;)
{
c=getchar();
如果(c>=32)
{
如果(请参阅)
如果(c=='[')
{
code=getchar();
/*对esc代码做些什么*/
持续
}
普查尔(c);
escseed=0;
}
其他的
如果(c==27)
{
escseen=1;
}
}
}
#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;
        }
  }
}