%20.png)
Я пытаюсь понять, как работают утилиты pg\more\less. Например, cat somebigfile | more. More теперь в интерактивном режиме. Его таблица fd: 0 (чтение конвейера из cat) 1 (stdout) 2 (stderr)
Я могу открыть /dev/tty на 3 fd и читать команды оттуда. Но больше могут выполнять некоторые действия без нажатия Enter. На Linux я могу использовать ncurses. Что мне нужно понять, чтобы сделать это на Solaris?
решение1
Основная идея заключается в том, чтобы прочитать() один символ из вашего ввода; см.http://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908в качестве примера (который я обнаружил через результаты поиска Googlehttps://stackoverflow.com/questions/9854267/реализация-больше-unix-utility-command):
int readch(void)
{
unsigned char c;
errno = 0;
if (read(fileno(stderr), &c, 1) <= 0) {
if (errno != EINTR)
end_it(0);
else
c = otty.c_cc[VKILL];
}
return (c);
}