#include <stdio.h>#include <unistd.h>int main(void){printf(" I like cows.");sleep(5);return 0;}
这段代码执行时,只有等到sleep结束,printf的语句才会显示在屏幕上,效果看起来像先sleep,再printf,为什么?
当printf读进字符串的时候,并不会马上打印,而是先储存在buff里面,当遇到下面4种条件的时候才进行打印:
1、程序结束:return 0; 或 exit(0);
2、遇到”\n”
3、主动刷新fflush(stdout);
4、缓冲区满
printf()写入stdout(默认输出流),通常是行缓冲。sleep调用时间不会刷新缓冲区,因此不会显示任何内容,当程序退出所有流时会自动刷新,这就是它在退出之前打印的原因。打印换行符通常会导致流刷新,或者可以使用以下fflush函数:
int main(void){printf(" I like cows.\n");sleep(5);return 0;}
要么:
int main(void){printf(" I like cows.");fflush(stdout);sleep(5);return 0;}
如果要输出到不是行缓冲的流,如果stdout被重定向或者你正在写入文件,打印换行符可能不起作用。在这种情况下,如果想立即写入数据,则应使用fflush。
