UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

9.8.8. Leer un número desconocido de enteros de un fichero

Recursos

  • Para esta actividad puedes partir del código que has escrito para el ejercicio fread_fixed_integers.c que leía enteros desde un fichero. Copia ese código en la carpeta fread_variable de tu carpeta compartida.

  • Sección 3 de Lectura y escritura de ficheros

Plan de trabajo

Los ficheros en Linux son una secuencia de bytes. Si en un fichero se almacenan datos de un tamaño arbitrario, nos encontramos con el problema de saber la cantidad de datos a leer para pasárselo como parámetro a la función fread. Hay varias formas de solventar esto, pero una de ellas consiste en anteponer a los datos un entero con su tamaño. De esta forma, el primer dato que se lee es el entero que indica cuántos datos están almacenados a continuación. La siguiente figura muestra esta técnica para un fichero con 5 enteros.

TAMANHO|ENTERO_0|ENTERO_1|ENTERO_2

Modifica el programa de fread_fixed_integers.c, llamándole fread_variable_integers.c para que lea los enteros de un fichero binario con esta estructura (números en binario almacenados en posiciones consecutivas precedidos por un entero con el tamaño):

Tu código deberá leer el tamaño y después pedir memoria con la función malloc para el array de enteros. No olvides utilizar la llamada a la función free para liberar la memoria antes de que termine el programa.

Prueba el programa con los siguientes ficheros fich_10_enteros y fich_enteros que encontrarás en la sub-carpeta fread_variable de tu carpeta compartida.

Sube el programa a la carpeta fread_variable de tu espacio de trabajo en Subversion.