Linux输出缓存你知道多大吗?
今天看到这个代码很简单,就是验证一下Linux系统的输出缓存大小。当
猜一下这个代码的输出:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define N 1025
int
main(int argc, char **argv)
{
char ch;
int count = 0;
char buf[N];
memset(buf, 'a', N);
buf[N-2] = 'b';
buf[N-1] = 'c';
fputs(buf,stdout);
//printf("%s",buf); //备用测试
//fflush(fp); //刷新缓存到输出
return 0;
}
既然代码这样写了,我们猜想肯定不会完全输出了,运行结果是:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaab
这个结果的原因是,当缓冲区达到最大时就会自动输出,在此程序中c没有输出,是因为缓存只有1024字节,c在前1024外,所以再不刷新缓存的情况下,c是不会输出的。
printf的输出结果和fputs一样,printf输出里如果加一个换行‘\n’也是可以输出的(这一点在调试时有时会遇到,printf打印的输出没有输出出来,有可能就是忘了加换行了)。fflush(fp); 函数会把缓存的数据刷新到输出。