В последнее время я пытаюсь написать простую версию команды Linux more
. Для этого мне нужно войти в неканонический режим и режим без эха в терминале, чтобы я сразу получил ввод после нажатия клавиши, и терминал не отображал символ I типа.
Я сделал это так:
// 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
Терминал вернулся в канонический режим и режим эха. Почему это происходит?