Я пишу утилиту для запуска программ, и мне нужно захватить небуферизованные stdout и stderr из программ. Мне нужно:
- Захват stdout и stderr в отдельные файлы.
- Вывод не должен буферизироваться (или быть буферизованным строкой).
- Без изменения источника запускаемой программы.
Проблема заключается в том, что при передаче вывода в файл поток stdout становится буферизованным блоком, а не буферизованным строкой. Если программа дает сбой, вывод никогда не сбрасывается и остается пустым. Поэтому мне нужно захватить стандартный вывод без буферизации (или с буферизацией строки).
Я думаю, что это можно сделать с помощью pty, но мне трудно найти примеры, которые делают именно то, что я хочу (большинство игнорирует stderr). На самом деле, я не уверен, что нашел какие-либо pty примеры в C; большинство из них используют высокоуровневый интерфейс, такой как pty и подпроцессные модули Python.
Может кто-нибудь помочь (с фрагментами кода или ссылками)? Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: Я думаю, что я решил это. Следующие две ссылки были очень полезны.
Мой код доступен в качестве хранилища: