'\n'真的用于冲洗吗?

dim*_*tar 0 c linux

#include <stdio.h>
#include <unistd.h>

int main (){

    while(1){
        fprintf (stdout,"hello-out");
        fprintf (stderr,"hello-err");
        sleep (1);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

好吧,我认为这只是打印,你好 - 然后你好 - 错误地休息一下并再次打印那些文字,但不,奇怪的事情正在发生,它只是打印hello-err然后需要一秒休息并做同样的事情再次.为什么?

但是等等,然后我决定在不同的行上打印它们,现在它起作用了.

fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err\n");
Run Code Online (Sandbox Code Playgroud)

- - - - - 与...一样 - - - - - -

fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err");
Run Code Online (Sandbox Code Playgroud)

那么'\n'在这里的重要性是什么?这与潮红有关吗?因为我读到'\n'用于冲洗.

并且还在stdout上打印文字,不会产生任何输出:(

fprintf (stdout,"hello-out");
fprintf (stdout,"hello-err");
Run Code Online (Sandbox Code Playgroud)

为什么?

Fat*_*ror 11

默认情况下,stdout是行缓冲.这意味着除非您明确刷新它,否则无法保证何时将写入写入目标,直到它看到\n.

stderr另一方面,默认情况下是无缓冲的.每次写入都会立即写入.