Ich habe bereits die Antwort auf eine ähnlichquestion gelesen, aber ich interessiere mich mehr für Stream-Pufferung beim Ausführen von E/A mit Dateien.setvbuf() - Puffergröße, wenn buf NULL ist
Wenn ich den folgenden Code
#include <stdio.h>
int main(void) {
printf("%d\n", BUFSIZ);
FILE *fp = fopen("ekomi.txt", "wb");
char array[2] = {'a', 'b'};
fwrite(array, sizeof(char), 2, fp);
fclose(fp);
return 0;
}
druckt BUFSIZ = 8192 Soweit ich BUFSIZ verstehen sollte der Wert von glibc für die Größe des nach fopen standardmäßig erstellt Puffer verwendet werden (die Soweit ich weiß, sollte dies der gleiche sein wie das Aufrufen von setvbuf, das einen NULL-Zeiger auf den Parameter buf gibt). lief ich dieses Programm mit Massiv und die Ausgabe zeigt deutlich, dass die von glibc zugewiesenen Puffer
Die GNU-C-Bibliothek Dokumentation selbst nicht klar ist, über die Standardgröße des Puffers 4096 Bytes lang ist:
Wenn Sie einen Nullzeiger als Buf-Argument angeben, weist setvbuf einen Puffer selbst zu, der malloc verwendet. Dieser Puffer wird freigegeben, wenn Sie den Stream schließen.
Also meine Frage ist, wie glibc entscheidet, wie viel Speicher für den Puffer zu reservieren?
Danke, das macht Sinn. –