Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C程序的标准输出被重定向到文件时,其输出顺序会不同?_C_Linux_Output_Io Redirection - Fatal编程技术网

为什么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