Estoy utilizando la función llamada fwrite()
para escribir datos en un conducto en Linux.Entender el comportamiento de búfer de fwrite()
Anteriormente, se llamaba a fwrite()
en busca de pequeños fragmentos de datos (promedio de 20 bytes) repetidamente y el almacenamiento en búfer se había dejado en fwrite()
. El proceso demostró que se estaban escribiendo 4096 bytes de datos a la vez.
Resultó que este proceso de escritura fue el cuello de botella en mi programa. Así que decidí almacenar datos en mi código en bloques de 64 KB y luego escribir todo el bloque a la vez usando fwrite()
. Usé setvbuf()
para configurar el puntero ARCHIVO * en 'Sin almacenamiento en búfer'.
La mejora en el rendimiento no fue tan significativa como esperaba.
Más importante aún, la salida strace
mostró que aún se estaban escribiendo datos de 4096 bytes a la vez. ¿Puede alguien explicarme este comportamiento? Si llamo al fwrite()
con 64 KB de datos, ¿por qué está escribiendo solo 4096 bytes a la vez?
¿Hay una alternativa a fwrite()
para escribir datos en una tubería utilizando un puntero FILE *?
¿Puede mostrarnos el código? – tuxuday
@Shailesh_Tainwala: Es posible que esté escribiendo su código en C++, pero esta es una pregunta c en lugar de C++. 'fwrite()' es una función c, no una función C++. Agregué una etiqueta c a su pregunta para que pueda obtener una audiencia más amplia. –