Linux探秘坊-------4.进度条小程序-1.缓冲区

时间:2025-01-23 06:58:54
#include <stdio.h>
int main()
{
 printf("hello bite!");
 sleep(2);
 return 0;
}

执行此代码后,会 先停顿两秒,再打印出hello bite,但是明明打印在sleep前面,为什么会后打印呢?

因为:

  • 在printf执行完了后,打印的内容被存到了缓冲区
  • 程序快结束时缓存区的内容再打印到显示器

奇妙的事情发生了:

#include <stdio.h>
int main()
{
 printf("hello bite!\n");
 sleep(3);
 return 0;
}

如果我们使用这样的代码,会 先打印出hello bite,再停顿两秒,为啥捏?

可以发现和上面的代码对比多了一个/n

  • 显示器有一种刷新策略,叫 行刷新
  • /n正好代表着换行,所以加了/n的内容会 直接从缓存区打印到显示器上不用等程序结束

那么我们有没有办法 不用\n也能先打印呢?
包有的:

#include <stdio.h>
int main()
{
 printf("hello bite!");
 fflush(stdout);
 sleep(3);
 return 0;
}
  • 这里的fflush(stdout)就起到了 刷新的作用