我正在尝试编写一个小程序来查找打开文件流的缓冲区大小.在搜索了一下之后,我找到了__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;
}
Run Code Online (Sandbox Code Playgroud)
我得到缓冲区大小为零.我有点困惑为什么会发生这种情况.默认情况下不应该缓冲流吗?如果在调用fbufsize之前将setvbuf与_IOFBF一起使用,则会得到一个非零值.
请注意,正确的返回类型main()是int,而不是void.
此代码在Linux上编译(Ubuntu 14.04衍生测试):
#include <stdio.h>
#include <stdio_ext.h>
int main(void)
{
FILE *f;
size_t bufsize;
f = fopen("test.txt", "wb");
if (f == NULL)
{
perror("fopen failed\n");
return -1;
}
bufsize = __fbufsize(f);
printf("The buffer size is %zd\n", bufsize);
putc('\n', f);
bufsize = __fbufsize(f);
printf("The buffer size is %zd\n", bufsize);
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行时,它会产生:
The buffer size is 0
The buffer size is 4096
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的那样,在使用文件流之前,不会设置缓冲区大小.在此之前,您可以使用更改大小setvbuf(),因此在尝试使用之前,库不会设置缓冲区大小.
BUFSIZ定义的宏<stdio.h>是默认缓冲区大小.找不到设置的缓冲区大小没有标准方法setvbuf().您需要确定您正在处理的平台,以允许__fbufsize()作为函数进行有用的评论(尽管它似乎是GNU libc扩展:) __fbufsize().
应该在程序中进行许多小的改进,但它们并没有立即密切相关.
| 归档时间: |
|
| 查看次数: |
3493 次 |
| 最近记录: |