La función fgets()
es parte del paquete de stdio, y como tal debe tampón (o no) el flujo de entrada de una manera que es consistente con también usando fgetc()
, fscanf()
, fread()
y así sucesivamente. Eso significa que el propio buffer (si el flujo está almacenado en el buffer) es propiedad del objeto FILE
.
Si hay un búfer o no, y si está almacenado en búfer, qué tan grande es el búfer, puede sugerirse a la biblioteca llamando al setvbuf()
.
La implementación de la biblioteca tiene una buena cantidad de latitud para ignorar pistas y hacer lo que cree mejor, pero los búferes que son poderes "razonables" de dos en tamaño generalmente serán aceptados. Ha notado que el valor predeterminado era 4096, que es claramente más pequeño que el óptimo.
La secuencia se almacena en el búfer por defecto si se abre en un archivo real. Su almacenamiento en búfer en una tubería, FIFO, TTY o cualquier otra cosa tiene potencialmente diferentes valores predeterminados.
Me gustaría, por ejemplo, sin embargo, un * buffer * grande, pero emitiendo lecturas en trozos algo más pequeños. con setvbuf tendría que establecer un tamaño máximo del búfer y las lecturas se emiten en el tamaño del búfer (por ejemplo, un búfer de 128k, las sissues se leen en trozos de 128k, lo que realmente resulta peor que hacer lecturas de 8192 bytes , en mi caso) – Anonym