最近,我正在尝试编写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
终端返回到规范和回显模式。为什么会这样?
答案 0 :(得分:2)
一般来说,应该从more
读取stderr
之类的内容(或有时读取/dev/tty
但stderr
会更好)。您将终端设置为stdin
。效果不好。