c - 非规范和非回声模式不适用于管道

标签 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

终端返回规范和回显模式。为什么会出现这种情况?

最佳答案

一般来说,像more这样的东西预计从 stderr 读取(或者有时 /dev/ttystderr 效果更好)。您将终端设置为 stdin反而。这效果不太好。

关于c - 非规范和非回声模式不适用于管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300831/

相关文章:

c - 取决于调试级别的函数多态性

c - 在 64 位中将地址空间大小保持为 4 GB

mysql - 为已安装的 rpm 添加别名

linux - Robot Framework : How can I execute a . 测试用例中的 sh 文件?

python - 如何避免 Python 输入中的箭头键值?

c - 在全屏模式下打开 Windows 控制台程序

c - 读取文件,将其反转并将其写入另一个文件

c - 是否有提供优先队列的 C 库?

python-3.x - Google Colab(Python、jupyter notebook)终端输入

python - 无法安装任何库 [SSL : TLSV1_ALERT_PROTOCOL_VERSION]