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

时间:2013-01-24 12:15:56

标签: c linux

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

int main (){

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

    return 0;
}

嗯,我认为这只是简单的打印,你好 - 然后hello-err再休息一下并再次打印那些文字,但是没有,奇怪的事情正在发生,它只是打印hello-err然后需要一秒休息而且同样的事情。为什么?

但是等等,然后我决定将它们分开打印,现在它起作用了。

fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err\n");

----------与------------

一样

fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err");

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

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

fprintf (stdout,"hello-out");
fprintf (stdout,"hello-err");

再次为什么?

3 个答案:

答案 0 :(得分:11)

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

另一方面,

stderr默认情况下是无缓冲的。每次写作都会立即写完。

答案 1 :(得分:1)

我已经改变了你的代码

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

int main (){
int i;
for(i=0;i<5;i++){
    fprintf (stdout,"hello-out");
    fprintf (stderr,"hello-err");
    sleep (1);
}

return 0;
}

现在输出

hello-errhello-errhello-errhello-errhello-errhello-out
hello-outhello-outhello-outhello-out

因为stderr没有被缓冲所以它的打印就像它来了。但是stdout是行缓冲的,所以它会在\ n出现时或者你的代码终止时或任何时候打印...所以最后我看到stdout打印

答案 2 :(得分:-3)

不,这不用于冲洗。 fflush用于此。 \ n只是表示换行符。