Как перенаправить stdout и stderr и сохранить порядок? - PullRequest
2 голосов
/ 09 января 2010

Я пишу простой редактор кода для языка ассемблера LC3, и я столкнулся с небольшой проблемой. Ассемблер LC3 выводит основную информацию о состоянии сборки, которую я пытаюсь отобразить в моей программе после считывания ее из файла журнала.

Первоначально я пытался использовать system () для вызова ассемблера LC3 и перенаправить stdout и stderr в файл, например так:

system("/pathto/lc3as 1> lc3.log 2>&1");

Выводит в файл, но не сохраняет порядок вывода из ассемблера.

Я придумал некрасивую работу, которая сохраняет порядок вывода, но включает в себя гораздо больше файлового ввода-вывода, чем хотелось бы, и я не уверен, будет ли он работать в любой ситуации. На этой ноте мне интересно, есть ли лучшее решение для направления вывода в мою программу, которая сохраняет порядок.

1 Ответ

1 голос
/ 09 января 2010

После перенаправления вывода выходной поток переключается из режима «сброс после каждой записи» в режим «только сброс при заполнении буфера». Теперь ваш вывод stderr будет полностью не синхронизирован с выводом stdout. Вы должны были бы явно позвонить fflush() самостоятельно. Возможно, у вашего ЭЛТ есть функция для изменения режима.

Также рассмотрите возможность исправления , а не . Никто никогда не перенаправляет болтовню прогресса в файл, важен только вывод stderr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...