为什么输出的执行顺序不符合预期

why the execution order of output is not as expected

我正在学习 c,但我被教程中的一些代码卡住了。

#include <stdio.h>
 
int main() {
    fprintf(stdout, "This is to stdout. ");
    fprintf(stderr, "This is to stderr. ");
    fprintf(stdout, "This is also to stdout. ");
}

他们得到的结果是

This is to stderr. This is to stdout. This is also to stdout. 

这是错误的 但我得到的是

This is to stdout. This is to stderr. This is also to stdout.

这是有序的。 所以这很奇怪,为什么我得到了不同的结果? (我指的tut是https://www.journaldev.com/39049/fflush-in-c

也许在您的实施中,stdout 无缓冲的 。检查您的文档。

您可能想尝试 setvbuf()stdout 恢复为 行缓冲 :例如,使用 setvbuf(stdout, 0, _IOLBF, 1000);main() 的任何其他使用之前 stdout.


通常 stdout 行缓冲的 stderr 未缓冲的

unbuffered:数据一可用就由OS从流发送到设备。

line-buffered:当达到换行符(或限制)时,数据被发送到设备。

fully buffered: 缓冲区满时发送数据到设备

fprintf(stdout, "hello"); // "hello" is kept in buffer because no newline
fprintf(stderr, "again"); // "again" is sent to the device immediately
fprintf(stdout, "world"); // "world" is kept in buffer
// ...
return 0;                 // buffer (now containing "helloworld") is sent to the device at program completion