La gestión de archivos es una de las funciones esenciales de un sistema operativo. Esta sección cubre los conceptos fundamentales, las operaciones básicas y avanzadas, y las estructuras de datos utilizadas para la gestión de archivos.

Conceptos Básicos

¿Qué es un Archivo?

Un archivo es una colección de datos almacenados en un dispositivo de almacenamiento. Los archivos pueden contener cualquier tipo de información, desde texto y datos binarios hasta imágenes y videos.

Tipos de Archivos

  • Archivos de Texto: Contienen datos en formato de texto legible.
  • Archivos Binarios: Contienen datos en formato binario, no legible directamente.
  • Archivos Ejecutables: Contienen código que puede ser ejecutado por el sistema operativo.
  • Archivos de Configuración: Utilizados para almacenar configuraciones de aplicaciones y sistemas.

Operaciones Básicas con Archivos

  • Creación: Generar un nuevo archivo en el sistema.
  • Lectura: Acceder y leer el contenido de un archivo.
  • Escritura: Modificar o añadir contenido a un archivo.
  • Eliminación: Borrar un archivo del sistema.
  • Apertura y Cierre: Preparar un archivo para ser leído o escrito y finalizar la operación.

Estructuras de Datos para la Gestión de Archivos

Tabla de Archivos Abiertos (Open File Table)

Una estructura que mantiene información sobre los archivos que están actualmente abiertos en el sistema. Incluye detalles como el puntero de archivo, el modo de acceso y el estado del archivo.

Descriptor de Archivo

Un identificador único que el sistema operativo asigna a cada archivo abierto. Los programas utilizan este descriptor para realizar operaciones de lectura y escritura.

Inodos (Index Nodes)

Estructuras de datos que contienen información sobre un archivo, como su tamaño, permisos, y punteros a los bloques de datos en el disco.

Operaciones Avanzadas

Bloqueo de Archivos

Permite que múltiples procesos accedan a un archivo de manera controlada, evitando conflictos y garantizando la integridad de los datos.

Mapeo de Archivos en Memoria

Una técnica que permite que el contenido de un archivo sea accedido directamente desde la memoria, mejorando la eficiencia de las operaciones de lectura y escritura.

Gestión de Espacio Libre

Métodos para gestionar el espacio disponible en el sistema de archivos, como listas enlazadas, mapas de bits y tablas de asignación de archivos (FAT).

Ejemplo Práctico en C

A continuación, se presenta un ejemplo de cómo realizar operaciones básicas de gestión de archivos en C.

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file;
    char buffer[100];

    // Creación y escritura en un archivo
    file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return EXIT_FAILURE;
    }
    fprintf(file, "Hola, Mundo!\n");
    fclose(file);

    // Lectura de un archivo
    file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return EXIT_FAILURE;
    }
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);

    // Eliminación de un archivo
    if (remove("example.txt") == 0) {
        printf("Archivo eliminado exitosamente\n");
    } else {
        perror("Error al eliminar el archivo");
    }

    return EXIT_SUCCESS;
}

Explicación del Código

  1. Creación y Escritura: Utilizamos fopen con el modo "w" para crear y abrir un archivo para escritura. fprintf escribe una cadena en el archivo y fclose cierra el archivo.
  2. Lectura: Abrimos el archivo con fopen en modo "r" para lectura. fgets lee una línea del archivo y printf la imprime en la consola. Finalmente, fclose cierra el archivo.
  3. Eliminación: remove elimina el archivo especificado.

Ejercicios Prácticos

Ejercicio 1: Creación y Lectura de Archivos

Escribe un programa en C que cree un archivo llamado data.txt, escriba las siguientes líneas en él:

Línea 1
Línea 2
Línea 3

Luego, lee el archivo y muestra su contenido en la consola.

Ejercicio 2: Copia de Archivos

Escribe un programa en C que copie el contenido de un archivo source.txt a un nuevo archivo destination.txt.

Ejercicio 3: Contar Palabras en un Archivo

Escribe un programa en C que lea un archivo de texto y cuente el número de palabras que contiene.

Soluciones

Solución Ejercicio 1

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file;
    char buffer[100];

    // Creación y escritura en un archivo
    file = fopen("data.txt", "w");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return EXIT_FAILURE;
    }
    fprintf(file, "Línea 1\nLínea 2\nLínea 3\n");
    fclose(file);

    // Lectura de un archivo
    file = fopen("data.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return EXIT_FAILURE;
    }
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);

    return EXIT_SUCCESS;
}

Solución Ejercicio 2

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *source, *destination;
    char buffer[100];

    // Apertura del archivo fuente
    source = fopen("source.txt", "r");
    if (source == NULL) {
        perror("Error al abrir el archivo fuente");
        return EXIT_FAILURE;
    }

    // Creación del archivo destino
    destination = fopen("destination.txt", "w");
    if (destination == NULL) {
        perror("Error al abrir el archivo destino");
        fclose(source);
        return EXIT_FAILURE;
    }

    // Copia del contenido
    while (fgets(buffer, sizeof(buffer), source) != NULL) {
        fputs(buffer, destination);
    }

    fclose(source);
    fclose(destination);

    return EXIT_SUCCESS;
}

Solución Ejercicio 3

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main() {
    FILE *file;
    char ch;
    int in_word = 0, word_count = 0;

    // Apertura del archivo
    file = fopen("text.txt", "r");
    if (file == NULL) {
        perror("Error al abrir el archivo");
        return EXIT_FAILURE;
    }

    // Contar palabras
    while ((ch = fgetc(file)) != EOF) {
        if (isspace(ch)) {
            in_word = 0;
        } else if (!in_word) {
            in_word = 1;
            word_count++;
        }
    }

    fclose(file);

    printf("El archivo contiene %d palabras\n", word_count);

    return EXIT_SUCCESS;
}

Conclusión

En esta sección, hemos cubierto los conceptos básicos y avanzados de la gestión de archivos en sistemas operativos. Aprendimos sobre las operaciones fundamentales, las estructuras de datos utilizadas y cómo realizar estas operaciones en C. Los ejercicios prácticos proporcionan una oportunidad para aplicar estos conceptos y reforzar el aprendizaje. En la siguiente sección, exploraremos la seguridad y los permisos de archivos, un aspecto crucial para la protección de datos en sistemas operativos.

© Copyright 2024. Todos los derechos reservados