最近,我正在尝试编写一个简单版本的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/tty
但 stderr
效果更好)。您将终端设置为 stdin
反而。这效果不太好。
关于c - 非规范和非回声模式不适用于管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300831/