这是我的计划。
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello\n");
system("uname");
return 0;
}
这是输出。
$ gcc foo.c
$ ./a.out
Hello
Linux
但是,如果我将程序的输出重定向到文件,我会看到输出的顺序是相反的,即在Linux
之前打印Hello
。
$ ./a.out > out.txt
$ cat out.txt
Linux
Hello
为什么涉及重定向时输出的顺序不同?
答案 0 :(得分:2)
由于在终端上进行缓冲,输出顺序可能不同。
答案 1 :(得分:2)
这是因为stdout以不同方式缓冲。在没有重定向的情况下调用程序时,缓冲默认为行缓冲。在第二次调用中,缓冲区要大得多,并在程序终止时写入。由于之前对uname
的调用已终止,此输出现在会在文件的前面显示。当您依赖订购时,您可以在fflush(stdout)
来电后明确致电printf
,也可以通过uname
致电popen
并明确打印其输出。