DeLa interfaz de programación de Linux:
(He leído las secciones relacionadas. Pegué este diagrama de resumen solo como ilustración).
Lo sé para IO directa que utiliza read
y write
llamadas al sistema. Hay 2 niveles de almacenamiento en búfer. read/write buffer
+ kernel buffer
.
Cuando se utilizan stdio
llamadas a la biblioteca, que se crean sobre las llamadas IO directas del sistema, es
stdio buffer
+read/write buffer
+kernel buffer
, 3 niveles de almacenamiento en búfer,
o
stdio
ywrite/read
compartir el mismo buffer, 2 niveles de buffering
stdio calls
<---> user buffer
<-----> read/write
+kernel buffer
?
(Creo que son 2 niveles de almacenamiento en búfer, pero quiero estar seguro).
Respuesta1
En el caso común hay dos niveles. La biblioteca stdio asigna un búfer en el espacio de usuario, y las llamadas a puts/printf/fprintf, etc. colocan caracteres en este búfer. En algún momento (por ejemplo, el búfer está lleno o se escribe una nueva línea y la secuencia está en modo de búfer de línea), la biblioteca stdio llama write
para pedirle al núcleo que escriba el búfer. El kernel generalmente copiará el búfer en un búfer del kernel, iniciará lo que sea necesario para llevar los datos al destino y regresar. El espacio de usuario entonces es libre de usar el búfer de espacio de usuario como quiera.
Es posible (pero inusual) tener diferentes implementaciones de stdio que hagan esto de manera diferente.fiotiene una capa de compatibilidad stdio. Se han propuesto varios esquemas para zero copy
etc. El punto es que stdio
te dice cuál es el efecto, no cómo se hace.