非规范和非回波模式不适用于管道

时间:2019-03-22 13:35:58

标签: c linux terminal pipe

最近,我正在尝试编写Linux命令more的简单版本。为此,我需要在终端中进入非规范模式和非回声模式,以便在按键后立即获得输入,并且终端不显示我键入的字符。

我是这样做的:

  // set the terminal mode
  struct termios tm;
  tcgetattr(STDIN_FILENO, &old);
  tm = old;
  tm.c_lflag &= ~(ICANON | ECHO);
  tm.c_cc[VMIN] = 1;
  tm.c_cc[VTIME] = 0;
  tcsetattr(STDIN_FILENO, TCSADRAIN, &tm);

当我使用类似

的参数时,此方法有效
more test_file

但是当我尝试使用其他命令来传递more

ls /bin | more

终端返回到规范和回显模式。为什么会这样?

1 个答案:

答案 0 :(得分:2)

一般来说,应该从more读取stderr之类的内容(或有时读取/dev/ttystderr会更好)。您将终端设置为stdin。效果不好。