В настоящее время я пишу пользовательскую оболочку для курса CS.Как я могу сохранить весь вывод на экран, сохраняя его?
Это базовая оболочка, которая читает пользовательский ввод и проверяет функции оболочки, а затем разворачивает себя и передает команды, которые были проанализированы на execvp().
Мне нужно сохранить вывод с экрана в текстовый файл, пока оболочка в данный момент запущена. Я просмотрел freopen, но это отрезало всю печать на экране.
Может ли кто-нибудь дать мне подсказку, в каком направлении искать эту функцию?
Посмотрите на [ttyrec] (http://0xcc.net/ttyrec/index.html.en), [ttygif] (https: // github.com/icholy/ttygif), [termrec] (http://angband.pl/termrec.html). – jofel
Кстати, это то, что POSIX-стандартные оболочки * не делают * - они оставляют только дескрипторы файлов, если явно не сказано перенаправить его где-то в другом месте, следовательно, утилита таких инструментов, как 'tee'. –
... Кроме того, это не так, потому что если вы перенаправляете stderr и stdout вместе, вы отбрасываете информацию о том, что программа сгенерирована с точки зрения содержимого, в которое входит ведро. Если вы переадресовываете их отдельно, даже если вы их рекомбинируете позже, тогда невозможно гарантировать, что рекомбинированный порядок соответствует первоначальному порядку. –