为什么C程序的标准输出被重定向到文件时,其输出顺序会不同?
这是我的节目为什么C程序的标准输出被重定向到文件时,其输出顺序会不同?,c,linux,output,io-redirection,C,Linux,Output,Io Redirection,这是我的节目 #include <stdio.h> #include <stdlib.h> int main() { printf("Hello\n"); system("uname"); return 0; } 但是,如果我将程序的输出重定向到一个文件,我会看到输出的顺序是相反的,即在Hello之前打印Linux $ ./a.out > out.txt $ cat out.txt Linux Hello 当涉及重定向时,为什么输出的顺
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello\n");
system("uname");
return 0;
}
但是,如果我将程序的输出重定向到一个文件,我会看到输出的顺序是相反的,即在Hello
之前打印Linux
$ ./a.out > out.txt
$ cat out.txt
Linux
Hello
当涉及重定向时,为什么输出的顺序不同?因为缓冲是在终端上完成的,所以输出的顺序可能不同。这是因为stdout的缓冲方式不同。在不重定向的情况下调用程序时,缓冲默认为行缓冲。在第二个调用中,缓冲区要大得多,当程序终止时会被写入。由于您对
uname
的调用以前已终止,因此该输出现在显示在文件的前面。当您依赖于排序时,您可以在printf
调用后显式调用fflush(stdout)
,也可以通过popen
调用uname
并显式打印其输出。错误。即使终端进行缓冲(我认为不是),它也只有一个“输入接收器”:数据的重新排序不能在那里发生。
$ ./a.out > out.txt
$ cat out.txt
Linux
Hello