我正在尝试编写一个小程序来查找打开文件流的缓冲区大小。在搜索了一下之后,我找到了__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之前使用_IOFBF调用setvbuf,则可以获得非零值。
<stdio.h>
中定义的宏BUFSIZ
是默认缓冲区大小。没有标准方法可以找到由setbuf()
或setvbuf()
设置的缓冲区大小。您需要确定您正在使用的平台,以允许有关__fbufsize()
作为函数的有用评论(尽管它似乎是GNU libc扩展:__fbufsize()
)。 - Jonathan Lefflersetvbuf()
更改大小,因此库可能直到尝试使用它之前才设置缓冲区大小。在printf()
之后添加fputc('a', f);
,然后再次测试大小;现在它可能不再是零了。 - Jonathan Leffler