Sleep函数有问题?

//sleep 函数有问题?
// 我的系统是13.1
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{

printf("this is a good program,");
sleep(5);
printf("after 5 seconds.\n");

return 0;

}
/* 本应该在输出"this is a good program" 后等待 5 秒后才输出"after 5 seconds"。
可是开始什么输出都没有,直到5秒后,输出"this is a good program,after 5 seconds."
*/

与 sleep 没有关系,是 printf 有行缓冲,printf 在输出内容的时候,会将输出内容放到缓冲区,当只有在缓冲区需要刷新的时候,才会将缓冲区里的内容在屏幕上打印出来,缓冲区会在以下情况进行刷新:缓冲区满、遇见’\n’、用 fflush 函数强制刷新、用 scanf 函数从缓冲区读数据还有程序结束的时候。

当执行到 printf(“this is a good program,”); 时,“this is a good program,”被放到了缓冲区,但没有引起缓冲区进行刷新的条件,执行 sleep(5); 也是一样,当执行到 printf(“after 5 seconds.\n”); 时,“after 5 seconds.\n” 被放到了缓冲区,此时缓冲区为"this is a good program,after 5 seconds.\n",由于遇到了‘\n‘,缓冲区会进行刷新,将“this is a good program,after 5 seconds.”输出。

1赞

楼上看得真仔细啊,我都没注意到"\n"。。。