如何重定向stdout和stderr并保留订单?

时间:2010-01-09 10:27:58

标签: c system

我正在为LC3汇编语言编写一个简单的代码编辑器,我遇到了一个小问题。 LC3汇编程序在从日志文件中读回后,输出有关我试图在程序中显示的汇编状态的基本信息。

最初我尝试使用system()来调用LC3汇编程序并将stdout和stderr重定向到一个文件,如下所示:

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

它输出到文件但不保留汇编程序输出的顺序。

我已经提出了一个丑陋的工作,它保留了输出的顺序,但涉及的文件IO比我想要的多得多,而且我不确定它是否适用于所有情况。在那个问题上,我想知道是否有更好的解决方案将输出路由到保存订单的程序。

1 个答案:

答案 0 :(得分:1)

重定向输出后,输出流从“每次写入后刷新”切换到“仅在缓冲区已满时刷新”模式。您的stderr输出现在与stdout输出完全不同步。您必须自己明确地致电fflush()。也许你的CRT有改变模式的功能。

还要考虑修复此问题。没有人会将进度聊天重定向到文件,只有stderr输出很重要。