Estimados,
A continuación encontrarán el repaso del taller 6. La grabación del taller se encuentra en la sección: Clases Online. Se adjunta materiales y código fuente de las soluciones de los ejercicios que se realizaron en clase.
Este fue el último taller del ciclo de talleres de PIE 2022.
Taller 6: Entrada/Salida
Requisitos:
- Mandatorio ver la grabación Teórico-Clase 6 (Sección: Clases Online)
- (Opcional) Leer capítulo 7 del Libro K&R.
- Relevamiento sobre instalación de la máquina virtual/ Entornos Linux.
Esquema:
- En la primer mitad del taller se continuó con estructuras, particularmente con estructuras autoreferenciadas. Se adjunta código fuente visto en clase en conjunto con algunos ejercicios de práctica acompañados con su solución.
- En la segunda parte se comenzó con el tema Entrada/Salida, se adjunta código visto en clase y repaso:
- FILE *fopen(const char *filename, const char *mode): Abre un archivo del disco para lectura o escritura.
Se requiere el nombre del archivo a abrir o crear, y el modo de apertura:
- con "r" abrimos el archivo para leer.
- con "w" creamos un archivo para escribir, descartamos contenido anterior.
- con "a" Abrimos un archivo para escribir, escribimos al final del archivo. Si no existe se crea.
- con "r+" abrimos un archivo como lectura y escritura, comenzando al inicio.
- con "w+" abrimos un archivo para lectura y escritura, descartamos el contenido anterior. Si no existe se crea vacío.
- con "a+" abrimos un archivo como lectura y escritura, comenzamos a escribir al final del archivo. Si no existe se crea.
- int fclose(FILE *stream): Cierra un archivo que se ha abierto.
2. Leemos y escribimos con formato: fscanf y fprintf:
- int fscanf(FILE *stream, const char *format, ...): lee la entrada con formato desde un flujo de datos.
- int fprintf(FILE *stream, const char *format, ...): escribe con formato hacia un flujo de datos.
3. Escribimos caracteres: putc, fputc, fputs:
- int putc(int character, FILE* stream): escribe un carácter en el flujo de datos (puede ser implementado como un macro).
- int fputc(int character, FILE* stream): lo mismo que putc (no puede ser implementado como un macro).
- int fputs (const char* str, FILE* stream): escribe un string en el flujo de datos hasta encontrar el carácter '\0'.
4. Leemos caracteres: getc, fgetc, fgets:
- int getc(FILE* stream): obtiene un carácter desde un flujo de datos (puede ser implementado como un macro).
- int fgetc(FILE* stream): lo mismo que getc (no puede ser implementado como un macro).
- char* fgets(char* str, int num, FILE* stream): obtiene un string desde un flujo de datos, hasta haber leido num-1 caracteres, o hasta encontrar un espacio o fin de linea. Lo que llegue primero.
5. Posicionamiento en los archivos: fseek, rewind:
- int fseek(FILE *stream, long int offset, int whence):
+ stream: Puntero a flujo (stream) de tipo FILE.
+ offset: Número de bytes de bias (offset) desde whence.
+ whence: Es la posición desde la que se agrega el sesgo (offset). Se especifica por medio de las siguientes constantes:
Constant Description:
+ SEEK_SET Principio del archivo
+ SEEK_CUR Posición actual
+ SEEK_END Fin del archivo
- void rewind(FILE *stream): fija la posición del archivo al comienzo del archivo del flujo de datos
Código fuente adjunto, ejemplos vistos en clase:
Estructuras:
- estructuras2022.c: Código fuente visto en clase
- Carpeta ejercicios_estructuras: Ejercicios de estructuras con solución.
Entrada/Salida:
- es_1.c: Abrimos un archivo como lectura y escritura, descartamos el contenido anterior, si el archivo no existe se crea.
Compilación y ejecución:
$gcc es_1.c
$./a.out archivo.txt
- es_2.c: Salida con formato: probamos escribir con puts y fprintf. Entrada con formato: probamos leer el archivo escrito previamente con fscanf utilizando el formato establecido y lo escribimos en consola.
Compilación y ejecución:
$gcc es_2.c
$./a.out archivo.txt
- es_3.c: Salida de carácter: fputc, fputs, putc. Entrada de carácter: fgetc, fgets, getc. Posicionamiento en los arhivos: fseek, rewind.
Compilación y ejecución:
$gcc es_3.c
$./a.out archivo.txt