Funkcja fgets()
jest częścią pakietu stdio i jako takie muszą buforowym (lub nie) do strumienia wejściowego w taki sposób, że jest zgodne z również za pomocą fgetc()
, fscanf()
fread()
, i tak dalej. Oznacza to, że sam bufor (jeśli strumień jest buforowany) jest własnością obiektu FILE
.
Niezależnie od tego, czy istnieje bufor, czy nie, a buforowany, to jak duży jest bufor, można zasugerować bibliotece, dzwoniąc pod numer setvbuf()
.
Implementacja biblioteki ma dużą swobodę ignorowania podpowiedzi i robienia tego, co uważa za najlepsze, ale bufory, które są "rozsądnymi" potęgami o dwóch rozmiarach, będą zwykle akceptowane. Zauważyłeś, że domyślną wartością jest 4096, która jest wyraźnie mniejsza niż optymalna.
Strumień jest buforowany domyślnie, jeśli jest otwarty w rzeczywistym pliku. Jego buforowanie na rurze, FIFO, TTY lub cokolwiek innego potencjalnie ma inne wartości domyślne.
Chciałbym np. * duży * bufor, ale wydawanie czyta w nieco mniejszych porcjach. przy ustawieniu setvbuf musiałbym ustawić maksymalny rozmiar bufora, a odczyty są wydawane w rozmiarze bufora (np. bufor 128k, odczyty sissues w porcjach 128k, co faktycznie okazuje się działać gorzej niż z odczytaniem 8192 bajtów , w moim przypadku) – Anonym