#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。