【发布时间】:2015-02-04 00:07:37
【问题描述】:
我正在尝试编写一个小程序来查找打开文件流的缓冲区大小。经过一番搜索,我找到了 __fbufsize() 函数。这是我写的代码:
#include <stdio.h>
#include <stdio_ext.h>
void main() {
FILE *f;
int bufsize;
f = fopen("test.txt","wb");
if (f == NULL) {
perror("fopen failed\n");
return;
}
bufsize = __fbufsize(f);
printf("The buffer size is %d\n",bufsize);
return;
}
我将缓冲区大小设为零。我有点困惑为什么会这样。默认情况下不应该缓冲流吗?如果我在调用 fbufsize 之前将 setvbuf 与 _IOFBF 一起使用,我会得到一个非零值。
【问题讨论】:
-
<stdio.h>中定义的宏BUFSIZ是默认缓冲区大小。没有标准方法可以找到setbuf()或setvbuf()设置的缓冲区大小。您需要确定您正在开发的平台,以允许对__fbufsize()作为函数进行有用的评论(尽管它似乎是 GNU libc 扩展:__fbufsize()。 -
在您使用文件流之前,很有可能不会设置缓冲区大小。在那之前,您可以使用
setvbuf()更改大小,因此库可能在您尝试使用它之前不会设置缓冲区大小。在printf()后面加上fputc('a', f);,然后再次测试大小;它可能不再是零了。
标签: c