一个小程序;
#include <stdio.h> #include <unistd.h> int main() { int i; for(i=0;i<3;i++) { fprintf(stdout,"hello-out"); fflush(stdout); fprintf(stderr,"hello-err"); sleep(1); } printf("\n"); return 0; }当屏蔽fflush(stdout);时,打印:hello-errhello-errhello-errhello-outhello-outhello-out
当不屏蔽时,打印:hello-outhello-errhello-outhello-errhello-outhello-err
为什么?
当没有fflush(stdout)时,hello-out在缓冲区,直到hello-err输入完成,再输入缓冲区内容。
但是,此时如果修改成这样:fprintf(stdout,"hello-out\n");
输出也是依次hello-out hello-err
如果只修改fprintf(stderr,"hello-err\n");,依旧是先输出三个hello-err后接着hello-out。
因为遇见 \n ,会输出缓冲区内容