[英]Buffer size in file I/O
我正在嘗試編寫一個小程序來查找打開文件流的緩沖區大小。 在搜索了一下之后,我找到了__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一起使用,則會得到一個非零值。
請注意, 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;
}
運行時,它會產生:
The buffer size is 0
The buffer size is 4096
正如評論中所建議的那樣,在使用文件流之前,不會設置緩沖區大小。 在此之前,您可以使用setvbuf()
更改大小,因此在您嘗試使用它之前,庫不會設置緩沖區大小。
<stdio.h>
定義的宏BUFSIZ
是默認緩沖區大小。 找不到setvbuf()
設置的緩沖區大小沒有標准方法。 您需要確定正在處理的平台,以便在__fbufsize()
作為函數進行有用的注釋(盡管它似乎是一個GNU libc擴展: __fbufsize()
)。
應該在程序中進行許多小的改進,但它們並沒有立即密切相關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.