【发布时间】:2019-03-03 05:30:16
【问题描述】:
我有一个 C 程序,可以编译为名为 myprogram 的可执行文件。这是它的主要功能:
int main(int argc, char ** argv) {
printf("this is a test message.\n");
system("ls");
return 0;
}
当我在 Linux shell 中运行 myprogram > output.txt 然后检查 output.txt 时,我看到上面列出的 ls 的输出“这是一条测试消息”。
我觉得应该反过来。为什么会发生这种情况,我该怎么做才能使“这是一条测试消息”出现在 output.txt 的顶部?
如果重要的话,我对 C 和命令行都是新手。
【问题讨论】:
-
当您混合不同的输出和输入缓冲区但不费心刷新输出时,无法保证它们会以什么顺序被写出。您的
printf输出可能会在ls输出之前、之后甚至中间被写出!当然,在其他输出中间写出输出是很少见的,但我已经看到它发生了。直觉上,您认为“不可能将一行输出写在另一行中间”,但当您真正看到它发生时,您对现实的看法就会受到挑战。 -
您需要冲洗打印的东西才能立即打印。
标签: c linux printf child-process io-redirection