Я пытаюсь написать небольшую программу, чтобы найти размер буфера открытого потока файлов. После небольшого поиска я обнаружил функцию __fbufsize(). Это код, который я написал:Размер буфера в файле I/O
#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;
}
Я получаю размер буфера как ноль. Я немного смущен, почему это происходит. Не следует ли буферизовать поток по умолчанию? Я получаю ненулевое значение, если я использую setvbuf с _IOFBF перед вызовом fbufsize.
Макрос 'BUFSIZ', определенный в' '- размер буфера по умолчанию. Нет стандартного способа найти размер буфера, заданный 'setbuf()' или 'setvbuf()'. Вам нужно определить платформу, над которой вы работаете, чтобы дать полезный комментарий к '__fbufsize()' как функцию (хотя, похоже, это расширение GNU libc: ['__fbufsize()'] (http: //linux.die .net/man/3/__ fbufsize) –
Существует также неплохой шанс, что до тех пор, пока вы не будете использовать поток файлов, размер буфера не будет установлен. До тех пор вы можете изменить размер с помощью 'setvbuf()', поэтому библиотека, вероятно, не задает размер буфера, пока вы не попытаетесь его использовать. Добавьте 'fputc ('a', f);' после 'printf()', а затем снова проверьте размер, он, вероятно, уже не равен нулю. –