Taller 6a: Entrada/Salida
Requisitos:
- Tener leído Capítulo 7 del Libro.
Esquema:
- En la primer mitad del taller se continuó con el tema estructuras, particularmente con estructuras autoreferenciadas. Se adjunta código fuente visto en clase en conjunto con los ejercicios realizados.
- En la segunda parte se comenzó con el tema Entrada/Salida, se presentó ejercicio 1, práctico 8: "Hola archivo" y se realizó un repaso de Entrada/Salida:
1. Abrir y/o crear un archivo para lectura y/o escritura y luego cerrarlo:
- 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" abrirmos el archivo para leer
- con "w" creamos un archivo para escribir, descartamos contenido anterior
- con "a" creamos un archivo para escribir, escribimos al final del archivo
- con "r+" abrimos un archivo como lectura y escritura, comenzando al inicio
- con "w+" abrimos un archivo como lectura y escrtura, descartamos el contenido anterior
- con "a+" abrimos un archivo como lectura y escritura, comenzamos a escribir al final del archivo
- 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 bias (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:
- estructuras.c: Código fuente visto en clase
Ejemplo de compilación y corrida en terminal:
$gcc estructuras.c
$./a.out hola
- Carpeta ejercicios_estructuras: Ejercicios con solución.
Entrada/Salida:
- es_1.c: Abrimos un archivo como lectura y escrtura, descartamos el contenido anterior.
- 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.
Ejemplo de compilación y corrida en terminal:
$gcc es_1.c
$./a.out hola
En el siguiente taller se seguirá con Entrada/Salida (posicionamiento: fseek, rewind) y se dará lectura de la letra del obligatorio 2.