技术改变命运
分类: C/C++
2016-08-04 07:42:59
原文地址:C小程序 - setbuf和setvbuf 作者:niannian
$cat 12345.txt
abcde
这个结果很让我奇怪,我本来以为我设置了一个20长度的行缓冲区,但是我只是输出6个字符,没有填满缓冲区,所以不应该有输出到文件,但是没想到,在sleep的时候去cat文件,发现内容已经写到了文件中,说明行缓冲区已经被填满。。。我很疑惑,然后我尝试把行缓冲区的大小扩大到200
#include
main()
{
char * str = "abcde";
char * buf = (char *)malloc(200);
FILE * fp = fopen("12345.txt", "w");
setvbuf(fp, buf, _IOLBF, 200);
fwrite(str, sizeof(char), strlen(str), fp);
sleep(100);
}
$cat 12345.txt
没有内容。扩大了行缓冲区后,这次没有内容输出到文件。所以我猜想内核肯定也会利用这个缓冲区做一些事情,而不只是单单把要输出的内容放进去,所以如果这个行缓冲区的大小比较小的话,虽然看起来能容纳下要输出的内容,但是很可能已经被系统内核的一些信息占了一些空间,所以有一点点输出也许就填满了缓冲区,从而就刷新到了文件里。不知道我这个理解对不对????