Documento Lectura y escritura de ficheros
Realizarás un programa dado por tu profesor en clase, relacionado con el manejo de ficheros y con lo visto hasta ahora. Podrás usar el material de clase.
Cuando termines, enséñaselo a tu tutor para que pueda evaluarlo.
Sección 3 de Lectura y escritura de ficheros
En este ejercicio se hará la inversa del ejercicio fwrite_getline.c
.
Dado el fichero en el que has guardado las cadenas, precedidas cada una por su tamaño,
deberás recuperarlas y mostrarlas por pantalla, tanto dichas cadenas como su tamaño.
Para ello deberás usar las funciones fread
y malloc
.
El fichero deberás llamarlo fread_variable_strings.c
Sube el programa a la carpeta
fread
de tu espacio de trabajo en
Subversion.
Sección 3 de Lectura y escritura de ficheros
Escribe un programa con nombre
fwrite_getline.c
(que encontrarás en tu
carpeta fwrite
) que realice las
siguientes operaciones:
Compruebe que el programa se ejecuta con sólo un argumento. En caso de que no sea así, imprime un mensaje y termina.
Abre el fichero cuyo nombre es la cadena pasada como único argumento. Si la operación falla, notificar mediante un mensaje y terminar la ejecución.
Va pidiéndole al usuario por pantalla que introduzca
introduzca una cadena o CTRL+D para terminar el programa (usando la función getline
).
getline
).
Calcula el tamaño de la cadena (con
strlen
) y guarda en el fichero con la función
fwrite
tanto el tamaño como la cadena. Cuando el
usuario quiere terminar el programa debe pulsar a
la vez CTRL+D.
El programa comprobará que ha introducido CTRL+D
comprobando el valor devuelto por getline
(lee sobre
getline
en su página de manual).
Se recuerda que getline
realiza
internamente un malloc
(si no lo hace explícitamente
el usuario), por lo que deberá realizarse tantas llamadas a
free
como llamadas a malloc
se hayan
hecho.
Cierra el fichero y si la operación produce un error, notifícalo con un mensaje por pantalla.
Sube el programa a la carpeta
fwrite
de tu espacio de trabajo en
Subversion.
Fichero Entrada_caracteres.txt
del directorio Files_exam
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea el texto contenido en el archivo Entrada_caracteres.txt
,
contabilice el número de caracteres del mismo y escriba ese número tanto por pantalla como en un nuevo fichero llamado
Resultado.bin
.
Sube el programa a la carpeta
Files_exam
de tu espacio de trabajo en
Subversion.
Fichero entrada_lineas.txt
del directorio Files_exam
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea el texto contenido en el archivo Entrada_lineas.txt
,
contabilice el número de líneas del mismo y escriba ese número tanto por pantalla como en un nuevo fichero llamado
Resultado.bin
.
Sube el programa a la carpeta
Files_exam
de tu espacio de trabajo en
Subversion.
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea una línea del usuario por teclado (con getline
), cuente la frecuencia
con la que aparece cada letra de esa línea (obvia la letra 'ñ' y considera el abecedario de 26 letras) y escriba esas frecuencias en un fichero
(para probar que las has escrito correctamente, prueba a leerlas del fichero).
Sube el programa a la carpeta
Files_exam
de tu espacio de trabajo en
Subversion.
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea un fichero de texto (hasta fin de archivo) e indique el porcentaje de palabras que tienen menos de 5 caracteres y el porcentaje de palabras con 5 o más caracteres. Puedes crearte tú mismo el archivo escribiendo en él una línea.
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
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.
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea una línea del usuario por
teclado (con getline
) y que la almacene en un fichero carácter
a carácter, pasando todos esos caracteres previamente a mayúscula (para
probar que los has escrito correctamente, lee el fichero).
Sube el programa a la carpeta
Files_exam
de tu espacio de trabajo en
Subversion.
Sección 3 de Lectura y escritura de ficheros
Escribe un programa que lea una línea del usuario por teclado (con getline
), indique qué letras
no han aparecido en el texto y escriba esas letras en un fichero (para probar que las has escrito correctamente, prueba a leerlas del fichero).
Sube el programa a la carpeta
Files_exam
de tu espacio de trabajo en
Subversion.
Documento Lectura y escritura de ficheros
Lee detenidamente el documento de manejo de ficheros en C que se te ofrece como recurso.
Asegúrate de que eres capaz de:
Definir cual es el modelo de entrada/salida en C.
Definir qué es el “indicador de posición del fichero”y qué función debes utilizar para moverlo a un punto concreto del fichero.
Conocer las funciones para abrir y cerrar ficheros.
Conocer las funciones para leer datos de un fichero y escribirlos en ellos,
con las funciones fread
y fwrite
.
Indicar qué función devuelve la posición del indicador de posición de un fichero.
Sección 1 y 2 de Lectura y escritura de ficheros
Copia de la plantilla CFile.templ
del directorio Plantillas
en tu carpeta compartida
a la subcarpeta fopen_fclose
.
Escribe un programa con nombre main.c
que realice las siguientes operaciones (parte de la plantilla en el
fichero CFile.templ
que encontrarás en la subcarpeta
fopen_fclose
de la carpeta compartida):
Cualquier programa en C se puede ejecutar desde la línea
de comandos añadiendo palabras separadas por espacios. La función
main
recibe como parámetros un entero (típicamente se le
pone el nombre argc
) con el número de argumentos que se han
escrito al invocar el programa (el nombre del programa se cuenta) y como
segundo parámetro un array con los punteros a las cadenas que se han
escrito en la línea de comandos (por tanto de tipo char
**
).
Escribe código en el main
para que
compruebe que el programa se ejecuta con sólo un argumento. En caso de
que no sea así, imprime un mensaje y termina.
Abre el fichero cuyo nombre es la cadena pasada como único argumento. Si la operación falla, notificar mediante un mensaje y terminar la ejecución.
Cierra el fichero y si la operación produce un error, notifícalo con un mensaje por pantalla.
Prueba el programa con diferentes nombres de ficheros, así como con nombres que no corresponden a fichero alguno.
Sube el programa a la carpeta
fopen_fclose
de tu espacio de trabajo en
Subversion.
Sección 3, 4 y 5 de Lectura y escritura de ficheros
Fichero fread_fixed_integers.c
almacenado en
la sub-carpeta fread_fixed
de tu carpeta
compartida.
Ficheros de datos en formato binario en la sub-carpeta
fread_fixed
de tu carpeta compartida.
Escribe un programa en el fichero
fread_fixed_integers.c
almacenado en el directorio
fread_fixed
de la carpeta compartida que realice las
siguientes operaciones:
Comprobar que el programa se ejecuta con sólo un argumento. En caso de que no sea así, imprime un mensaje y termina.
Abrir el fichero cuyo nombre es la cadena pasada como único argumento. Si la operación falla, notificar mediante un mensaje y terminar la ejecución.
Leer del fichero como mucho 10 enteros y los guarda en un array de tamaño 10. El programa debe funcionar con cualquier número de enteros de 0 a 10. Si la operación de lectura produce un error, debes notificarlo con un mensaje por pantalla. Si todo ha ido bien, muestra por pantalla los números leídos.
Cerrar el fichero y si la operación produce un error, notifícalo con un mensaje por pantalla.
Prueba el programa con los ficheros
fich_0_enteros
(fichero vacío),
fich_07_enteros
(fichero con 7 enteros) y
fich_10_enteros
(fichero con 10 enteros) que
encontrarás en tu carpeta de trabajo compartida.
Sube el programa a la carpeta
fread_fixed
de tu espacio de trabajo en
Subversion.
Sección 4 de
Lectura y escritura de ficheros
. Más concretamente las funciones de biblioteca
fseek
y ftell
. Puedes utilizar el comando
man desde un terminal de comandos para acceder a esta
información.
Fichero main.c
de la actividad
“
” en la carpeta
fopen_fclose
.
Escribe una función con el siguiente prototipo:
static long get_file_size(FILE * file);
Esta función devuelve el tamaño en bytes del fichero que se
pasa como parámetro y que debe estar previamente abierto. Añade en el
main
una línea que llama a esta función e imprime por pantalla
el tamaño del fichero dado. Comprueba con ficheros almacenados en ese mismo
directorio, que la cifra coincide con la que se obtiene con el comando
ls -l
(en la cuarta columna muestra el tamaño en bytes de un
fichero).
Una vez escrita la función y verificado su funcionamiento con un programa, subela a Subversion. Luego, muéstrasela al tutor.