Tuvimos una discusión aquí en el trabajo sobre por qué fread y fwrite toman un tamaño por miembro y cuentan y devuelven el número de miembros leídos / escritos en lugar de simplemente tomar un búfer y un tamaño. El único uso que se nos puede ocurrir es si desea leer / escribir una matriz de estructuras que no son divisibles por la alineación de la plataforma y, por lo tanto, se han rellenado, pero que no pueden ser tan comunes como para justificar esta elección. en diseño.
Desde FREAD (3) :
La función fread () lee nmemb elementos de datos, cada tamaño en bytes, del flujo al que apunta el flujo, almacenándolos en la ubicación dada por ptr.
La función fwrite () escribe nmemb elementos de datos, cada tamaño en bytes, en el flujo al que apunta el flujo, obteniéndolos de la ubicación dada por ptr.
fread () y fwrite () devuelven el número de elementos leídos o escritos correctamente (es decir, no el número de caracteres). Si se produce un error o se llega al final del archivo, el valor devuelto es un recuento corto de elementos (o cero).