Dominando E/S de archivos en C: Crear, abrir y gestionar archivos
El capítulo anterior explicó dispositivos estándar de entrada/salida. Este cubre cómo los programadores C pueden crear, abrir, cerrar archivos de texto o binarios para almacenamiento de datos.
Un archivo representa una secuencia de bytes, sea texto o binario. C proporciona funciones de alto nivel y llamadas de bajo nivel (nivel SO) para manejar archivos. Este capítulo repasa las llamadas importantes para gestión de archivos.
Abrir archivos
Usa fopen() para crear nuevo archivo o abrir existente. Inicializa un objeto tipo FILE con info para controlar el flujo. Prototipo:
FILE *fopen(const char *filename, const char *mode);
filename es cadena literal para nombrar el archivo; mode puede tener estos valores:
| Nº | Modo y Descripción |
|---|---|
| 1 | r Abre archivo de texto existente para lectura. |
| 2 | w Abre para escritura. Si no existe, lo crea. Escribe desde el inicio. |
| 3 | a Abre para escritura en modo append. Si no existe, lo crea. Anexa al contenido existente. |
| 4 | r+ Abre para lectura y escritura. |
| 5 | w+ Abre para lectura y escritura. Trunca a longitud cero si existe, sino crea. |
| 6 | a+ Abre para lectura y escritura. Crea si no existe. Lectura desde inicio, escritura solo append. |
Para archivos binarios, usa modos:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
Cerrar un archivo
Usa fclose(). Prototipo:
int fclose(FILE *fp);
Devuelve cero en éxito, EOF si error. Vacía buffer pendiente, cierra archivo y libera memoria. EOF está definido en stdio.h.
Varias funciones de la biblioteca estándar leen/escriben carácter a carácter o cadenas de longitud fija.
Escribir un archivo
Función simple para escribir caracteres individuales:
int fputc(int c, FILE *fp);
fputc() escribe el carácter c en el flujo referenciado por fp. Devuelve carácter escrito o EOF si error.
Para escribir cadena terminada en nulo:
int fputs(const char *s, FILE *fp);
fputs() escribe la cadena s en el flujo. Devuelve valor no negativo en éxito, EOF en error. También puedes usar fprintf(FILE *fp, const char *formato, ...). Ejemplo (asegura directorio /tmp):
#include <stdio.h>
main() {
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "Esto es prueba para fprintf...\n");
fputs("Esto es prueba para fputs...\n", fp);
fclose(fp);
}
Crea test.txt en /tmp y escribe dos líneas. Leamos este archivo en la siguiente sección.
Leer un archivo
Función simple para leer un carácter:
int fgetc(FILE *fp);
fgetc() lee un carácter del archivo referenciado por fp. Devuelve carácter leído o EOF si error.
Función para leer cadena de un flujo:
char *fgets(char *buf, int n, FILE *fp);
fgets() lee hasta n-1 caracteres del flujo fp, copia al buffer buf añadiendo nulo final. Si encuentra '\n' o EOF antes, devuelve solo lo leído hasta ese punto incluyendo nueva línea. También puedes usar fscanf(FILE *fp, const char *formato, ...) pero se detiene en el primer espacio.
#include <stdio.h>
main() {
FILE *fp;
char buff[255];
fp = fopen("/tmp/test.txt", "r");
fscanf(fp, "%s", buff);
printf("1: %s\n", buff);
fgets(buff, 255, (FILE*)fp);
printf("2: %s\n", buff);
fgets(buff, 255, (FILE*)fp);
printf("3: %s\n", buff);
fclose(fp);
}
Resultado:
1: Esto 2: es prueba para fprintf... 3: Esto es prueba para fputs...
Detalle: fscanf() leyó solo "Esto" (se detuvo en espacio), primer fgets() leyó resto de línea, segundo fgets() leyó segunda línea completa.
Funciones de E/S Binaria
Dos funciones para entrada/salida binaria:
size_t fread(void *ptr, size_t tamaño_elemento, size_t num_elementos, FILE *archivo); size_t fwrite(const void *ptr, size_t tamaño_elemento, size_t num_elementos, FILE *archivo);
Ambas se usan para leer/escribir bloques de memoria (usualmente arrays o estructuras).
Lenguaje C
- Tarjetas I/O Explicadas: Cómo Funcionan y Por Qué Importan
- Axiomtek IPS960-511-PoE: Controlador Visión Todo-en-Uno Robusto para Inspección Industrial
- Serie EDAM‑4200 de acceed: Módulos I/O integrados para comunicación de datos escalable y fiable
- Dominando la entrada/salida en C: scanf() y printf() explicados
- Manejo de archivos en C: Dominando E/S con fopen, fprintf, fread y fseek
- Dominando funciones en C: Estructura, declaración y mejores prácticas
- Entendiendo los Archivos de Cabecera en C: Tipos, Uso y Buenas Prácticas
- Entrada/Salida de archivos en C#: Lectura, escritura y gestión de streams
- Exportación de Datos desde MATLAB: Formatos y Técnicas
- Entrada/Salida de Archivos en Python: Dominando Operaciones de Lectura, Escritura y Gestión
- Entrada/Salida de Archivos en Python: Domina las Operaciones I/O