c - 为什么将标准输出重定向到文件时,C 程序的输出顺序不同?

标签 c linux output io-redirection

<分区>

这是我的程序。

#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

为什么涉及重定向时输出的顺序不同?

最佳答案

这是因为标准输出以不同的方式缓冲。当您在没有重定向的情况下调用您的程序时,缓冲默认为逐行缓冲。在第二次调用中,缓冲区要大得多,并在程序终止时写入。由于您之前终止了对 uname 的调用,因此此输出现在显示在文件的较早位置。当您依赖于顺序时,您可以在 printf 调用之后显式调用 fflush(stdout),或者您可以通过 调用 uname >popen 并显式打印其输出。

关于c - 为什么将标准输出重定向到文件时,C 程序的输出顺序不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437961/

相关文章:

c - 寻找最小的整数

c - C 和 POSIX 在哪里指定标准 header 必须包含在文件范围内?

Linux 默认调度程序替代方案

C++ 输出:std::cout 和文件输出的内容不同

python - 我的 CSV 编写器代码在字符之间写入分隔符而不是字符串

c - 如何正确实现 kthreads 的完成?

c++ - 如何使该函数与 FILE 一起使用? C++

c - 是否有任何平台在 fd_set 上使用结构副本(对于 select() 或 pselect())会导致问题?

linux - 为什么我在 shell 中键入 linux 中的时间命令与在脚本中使用它时输出不同?

R:多个模型并排的方差分析输出