2010-01-09 3 views
2

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

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

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

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

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

+1

Что такое ОС? POSIX-подобный, Windows или ..? – 2010-01-09 10:35:39

ответ

1

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

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

+0

Хм, да, я думаю, я в порядке, оставив его. К сожалению, «болтовня» в stdout kinda дает некоторую информацию об ошибках, например, о том, как проходит ошибка, но я думаю, что фактических ошибок может быть достаточно. –