stdout是经过缓冲处理的。写入stdout的数据不会立刻被写入终端(或其它设备,如果程序输出被重定向)除非缓冲区满、程序正常退出或stdout被关闭。你可以这样显式地刷新输出流:fflush (stdout);与stdout不同的是,stderr没有经过缓冲处理;输出到stderr的数据会直接被发送到终端。
所以这个程序并不会每一秒中输出一个句点,而是一次性输出10个句点。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=10;
while(i--)
{
printf(".");
sleep(1);
}
}
这个程序则会每秒输出一个句点。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=10;
while(i--)
{
fprintf(stderr,".");
sleep(1);
}
}