Está en la página 1de 24

Ing.

Tulio Mamani
Gestion de almacenamiento no volatil

Para los sistemas de computación, existe la necesidad de


almacenar y recuperar la información

Existe una variedad de medios externos donde almacenar la


información los cuales ofrecen varias ventajas según sus
características.
Definicion de Archivos
Los archivos son colecciones de información relacionada,
definidas por sus creadores. Éstos almacenan programas (en
código fuente y objeto) y datos tales como imágenes,
textos, información de bases de datos, etc.

El SO es responsable de:

• Construir y eliminar archivos y directorios.


• Ofrecer funciones para manipular archivos y directorios.
•Establecer la correspondencia entre archivos y unidades
de almacenamiento.
• Realizar copias de seguridad de archivos.
Sistema de Archivos
El sistema de archivos o sistema de ficheros es el
componente del sistema operativo encargado de administrar
y facilitar el uso de las memorias periféricas, ya sean
secundarias o terciarias
Atributos de los archivos
Los archivos son estructuras de datos que tienen asignados
diferentes atributos:

Archivos

Nombre

Tipo

Ubicación en el dispositivo

Tamaño

Información de Protección

Información Fechas, horas e ID de usuario


Operaciones
Los atributos de los archivos deben almacenarse en alguna
estructura, Directorio o Tabla de Contenidos.

Esta Estructura, al igual que los archivos, deben ser No


volátiles y deben ser cargados en memoria cuando se los
necesita
Operaciones sobre directorios

A igual que cualquier estructura de datos, la estructura de


directorios soporta un conjunto de operaciones sobre si
misma:

Operaciones sobre Directorios

Buscar un archivo por nombre

Crear Archivos

Borrar Archivos

Renombrar Archivos

Listar un Directorio

Recorrer el sistema de Ficheros.


Organización en el sistema de
archivos

Un sistema de archivos presenta dos problemas de diseño


muy destacables.

Operaciones sobre Directorios

Definir la interfaz hacia el usuario (Atributos,


operaciones, estructura de directorios, etc.)

Definir los algoritmos y estructuras de datos que


permiten mapear el sistema de ficheros lógico
sobre el físico
Organización en el sistema de
archivos

Un ejemplo de asignación física es la Asignación Enlazada

Asignación Enlazada
Cada fichero es una lista enlazada de bloques de
disco
• Entrada de directorio contiene:
• Puntero al primer y último bloque del archivo

Asignación enlazada FAT


• Variación del método de asignación enlazada
• FAT (Tabla de asignación de archivos, File
Allocation Table)
• Se aparta una sección del disco al principio de
cada partición para guardar en ella la tabla
• Empleado en MS-DOS y las tarjetas de
memoria flash
Manejo de archivos en C++
En C++ un archivo es un concept lógico que puede aplicarse a
muchas cosas, desde un disco, hasta puertos periféricos como
ser USB, puerto de impresora, etc.

En C++ un archivo es un concepto lógico que puede aplicarse a


muchas cosas, desde un disco, hasta puertos periféricos como
ser USB, puerto de impresora, etc.

Se asocia una secuencia con un archivo especifico realizando una


operación de apertura para después poder realziar el intercambio
de datos y finalmente cerrar el archivo.
Funciones para manejo de archivos en
C++

Las funciones para la manipulación de archivos se encuentran en


la librería stdio.h
Interacción con los archivos

En C++ utilizaremos la siguiente secuencia para manipulación de


archivos.

Crear un puntero del tipo *FILE

Abrir el archivo con la función fopen

Realizar la lectura, escritura, etc.

Cerrar el archivo con la función fclose


Puntero a un archivo
En C++ utilizaremos la siguiente secuencia para manipulación
de archivos. Este puntero es un hilo que comunica el sistema de
periféricos del computador E/S con el buffer.

Un puntero a un archivo es una variable puntero a una


estructura del tipo FILE. La estructura FILE contiene datos o
variables que definen: Posicion del archivo, buffer
asociado,nombre, etc.
Apertura de un archivo
Antes de realizar operaciones con un archivo se debe aperturar el
mismo mediante la función fopen.

El prototipo de la función “fopen” es:

FILE *fopen(const char *filename, const char *mode)

Sobre la declaración podemos observar:

• fopen devuelve un valor del tipo *FILE


• Si la apertura falla fopen devuelve NULL
• El argumento *filename, es elnombre con el que el archivo aparece en el
disco.
• El argumento mode indica el tipo de operaciones que se pueden ejecutar
con el archivo.
Apertura de un archivo
Los valores posibles de mode son:

Sobre la declaración podemos observar:

• r: El archivo se abre solo para lectura, si no existe devuelve un puntero


nulo.
• r+: El archivo se abre solo para lectura/escritura al prncipio del archivo.
• w: El archivo se crea para escritura, si el archivo ya existe lo elimina.
• w+: El archivo se crea para lectura/escritura, si el archivo ya existe lo
elimina.
• a: Si ya existe un fichero con ese nombre lo abre para lectura y escritura (al
inicio del archivo), sino lo crea.
• a+: Si ya existe un fichero con ese nombre lo abre para lectura y escritura
(al final del archivo), sino lo crea.
• t: Archivo tipo texto.
• b: Archivo tipo binario
Cierre de un archivo
Todo archivo abierto debe cerrarse para almacenar la información
que aun se encuentra en buffer y actualizar algunos daos de
cabecera. El cierre se lo realiza con la función fclose.

El prototipo de la función “fclose” es:

int fclose (FILE *fp)

Sobre la declaración podemos observar:

• fclose devuelve cero si el cierre ha sido exitoso y devuelve un valor


constante EOF si el cierre falló.
• El parámetro File es la variable file que queremos cerrar.
Operaciones de I/O caracter

C++ soporta varias funciones de lectura/escritura caracter,


mencionaremos a las siguientes:

fgetc/ fputc

Esta función lee un caracter a la vez del archivo que esta siendo
señalado con el puntero *archivo. En caso de que la lectura sea exitosa
devuelve el caracter leído y en caso de que no lo sea o de encontrar el
final del archivo devuelve EOF.

El prototipo es:

char fgetc(FILE *archivo);


char fputc(int c, FILE *archivo);
Operaciones de I/O cadena

fgets,fputs

Permiten la escritura y lectura de cadenas de caracter

El prototipo es:
char fgets(char *s,int n,FILE *archivo);
char fputs(char *s,FILE *archivo);

La función fgets leerá hasta n-1 caracteres o hasta que lea un cambio
de línea '\n' o un final de archivo EOF.
Control de inicio fin del archivo

feof (End of file)

Esta función sirve para determinar si el cursor dentro del archivo


encontró el final.

Existe otra forma de verificar el final del archivo que es comparar el


caracter que trae fgetc del archivo con el macro EOF declarado dentro
de stdio.h.

La función feof siempre devolverá cero (Falso) si no es encontrado EOF


en el archivo, de lo contrario regresará un valor distinto de cero
(Verdadero).
void rewind(FILE *fichero);

Control de inicio fin del archivo

rewind (Rebobinado del archivo)

Esta función sitúa el cursor de lectura/escritura al principio del archivo.


El prototipo correspondiente de rewind es:

void rewind(FILE *fichero);


Ejemplo 1
Crear un programa en C++ que nos permita abrir y cerrar un
archivo llamado MEC230.dat en modo lectura

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

int main()
{
FILE *archivo;
archivo= fopen ( "MEC230.dat", "r" );
if (archivo==NULL)
{
fputs ("ERROR AL ENCONTRAR ARCHIVO MEC230.dat",stderr);
exit (1);
}
fclose ( archivo);
return 0;
}
Ejemplo 2
Escribir un programa que permita recorrer el archivo "prueba.txt"

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

int main()
{
FILE *archivo;
archivo= fopen ( "MEC230.dat", "r" );
if (archivo==NULL)
{
fputs ("ERROR AL ENCONTRAR ARCHIVO MEC230.dat",stderr);
exit (1);
}
fclose ( archivo);
return 0;
}
Ejemplo 3
Escribir un programa que permita recorrer el archivo "prueba.txt“
usando fgets

#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *archivo;
char cadena[100];
int contLect=0;
archivo = fopen("prueba.txt","r");
if (archivo == NULL)
{
printf("\n EL ARCHIVO NO EXISTE\n\n");
exit(1);
}
Ejemplo 3
Escribir un programa que permita recorrer el archivo "prueba.txt“
usando fgets

else
{
printf("\nEl contenido del archivo de prueba es
\n\n");
while (feof(archivo) == 0)
{
fgets(cadena,5,archivo);
printf("%s",cadena);
contLect++;
}
printf("\n\n Nro de lecturas del archivo:
%d\n",contLect);
system("PAUSE");
}
fclose(archivo);
return 0;
}

También podría gustarte