From c3310277e911e1e8a987f166b3975b7cafe1f3b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Mon, 19 Apr 2004 02:06:55 +0000 Subject: [PATCH] un poco de lo general de EMUFS --- doc/informe.lyx | 279 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 240 insertions(+), 39 deletions(-) diff --git a/doc/informe.lyx b/doc/informe.lyx index a545920..adaf456 100644 --- a/doc/informe.lyx +++ b/doc/informe.lyx @@ -55,8 +55,11 @@ EMUFS \layout Standard +\family typewriter +EMUFS +\family default \emph on -EMUFS + \emph default es la estuctura principal que encapsula todas las funciones para el manejo de un archivo de datos. @@ -65,21 +68,149 @@ es la estuctura principal que encapsula todas las funciones para el manejo Esta estructura consta de: \layout Enumerate -EMUFS_Tipo que es un tipo enumerado que indica cual es la organización. + +\family typewriter +EMUFS_Tipo +\family default + que es un tipo enumerado que indica cual es la organización. \layout Enumerate -EMUFS_BLOCK_SIZE indica el tamaño del bloque para los tipos 1 y 3. + +\family typewriter +EMUFS_BLOCK_SIZE +\family default + indica el tamaño del bloque para los tipos 1 y 3. \layout Enumerate -EMUFS_REG_SIZE indica el tamaño del registro, para el tipo 3 que posee tamaño - constante. + +\family typewriter +EMUFS_REG_SIZE +\family default + indica el tamaño del registro, para el tipo 3 que posee tamaño constante. \layout Enumerate -void *leer_bloque() -\layout Comment -no me convence esta descripcion. - +\family typewriter +void **leer_bloque() +\family default +puntero a la función para leer un bloque. +\layout Enumerate + + +\family typewriter +void *leer_bloque_raw() +\family default + puntero a la función para leer un bloque, el anterior y el siguiente. +\layout Enumerate + + +\family typewriter +void **leer_registro() +\family default + puntero a la función para leer un registro. +\layout Enumerate + + +\family typewriter +void **leer_registro_raw() +\family default + puntero a la función para leer un registro con su encabezado. +\layout Enumerate + + +\family typewriter +EMUFS_REG_ID *grabar_registro() +\family default + puntero a la función para grabar un registro. +\layout Enumerate + + +\family typewriter +EMUFS_REG_ID *modificar_registro() +\family default +puntero a la función para modificar un registro. +\layout Enumerate + + +\family typewriter +int *borrar_registro() +\family default + puntero a la función para borrar un registro. +\layout Enumerate + + +\family typewriter +EMUFS_Estadisticas *leer_estadisticas() +\family default + puntero a la función para cargar una estructura con las estadísticas. +\layout Enumerate + + +\family typewriter +void *compactar() +\family default + puntero a la función para compactar un archivo. +\layout Enumerate + + +\family typewriter +char *nombre +\family default + almacena el nombre del archivo sin extensión. +\layout Standard + +Esta estructura define los valores de sus punteros según el tipo de organización + que se desee manejar. +\layout Standard + +Por ejemplo si se desea crear un archivo de nombre +\begin_inset Quotes eld +\end_inset + +facturas +\begin_inset Quotes erd +\end_inset + + organizado de la forma 3, se invoca a la función +\family typewriter +EMUFS *emufs_crear(const char *filename, EMUFS_Tipo tipo,EMUFS_BLOCK_SIZE + tam_bloque, EMUFS_REG_SIZE tam_reg), +\family default +donde +\family typewriter + filename +\family default +es el nombre que tendrán los archivos de datos e índice, +\family typewriter +tipo +\family default + es el tipo de organización - bloques parametrizados y registros constantes + en este caso-, +\family typewriter +tam_bloque +\family default + es el tamaño del bloque, y +\family typewriter +tam_reg +\family default + es el tamaño del registro. +\layout Standard + +Para las diferentes organizaciones puede ser que alguno de estos 2 últimos + valores no tengan sentido almacenarlas y tomaran un valor por defecto igual + a cero. +\layout Standard + +Según el tipo de organización, se inicializan los punteros a las funciones. + Para el ejemplo +\family typewriter +leer_bloque +\family default + se igualará a +\family typewriter +emufs_tipo3_leer_bloque() +\family default +, y lo mismo sucede con los demás. \layout Subsection EMUFS_Tipo @@ -222,11 +353,15 @@ id \layout Standard Si un registro es borrado del archivo de datos, debe actualizarse el índice, - esto se logra colocando un flag que indique que el id no pertenece a ningún - bloque, hemos adoptado poner -1 en el campo location de la estructura + esto se logra colocando un flag que indique que el \emph on -EMUFS_IDX +id \emph default + no pertenece a ningún bloque, hemos adoptado poner -1 en el campo location + de la estructura +\family typewriter +EMUFS_IDX +\family default . \layout Standard @@ -241,23 +376,43 @@ id Organización física \layout Standard -El tipo EMUFS_IDX define la estuctura de los registros de este archivo. +El tipo +\family typewriter +EMUFS_IDX +\family default + define la estuctura de los registros de este archivo. \layout Standard Esta estructura está compuesta por: \layout Itemize -EMUFS_REG_ID reg_id indica el + +\family typewriter +EMUFS_REG_ID +\family default + reg_id indica el \emph on id \emph default del registro \layout Itemize -EMUFS_BLOCK_ID location número de bloque donde se encuentra el registro. + +\family typewriter +EMUFS_BLOCK_ID +\family default + location número de bloque donde se encuentra el registro. \layout Standard -EMUFS_REG_ID y EMUFS_BLOCK_ID son + +\family typewriter +EMUFS_REG_ID +\family default + y +\family typewriter +EMUFS_BLOCK_ID +\family default + son \emph on unsigned long. \layout Comment @@ -287,19 +442,23 @@ La estructura de este archivo est De esta manera al querer guardar un registro este archivo informará donde cabe el mismo, previa invocación al la función -\emph on +\family typewriter EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE*) -\emph default - perteneciente a fsc.h, la cual devuelve el número de bloque donde entra - el registro o -1 si no hay un bloque con lugar suficiente, y toma como - parámetros una estructura +\family default + perteneciente a \emph on -EMUFS +fsc.h, \emph default + la cual devuelve el número de bloque donde entra el registro o -1 si no + hay un bloque con lugar suficiente, y toma como parámetros una estructura + +\family typewriter +EMUFS +\family default , y dos -\emph on +\family typewriter EMUFS_FREE -\emph default +\family default donde el segndo parámetro es el tamaño buscado, y el tercero devuelve el tamaño disponible. \layout Standard @@ -314,17 +473,36 @@ Organizaci La estuctura que define este archivo es la siguiente: \layout Standard -EMUFS_FSC que contiene: + +\family typewriter +EMUFS_FSC +\family default + que contiene: \layout Itemize -EMUFS_BLOCK_ID indica el número de bloque + +\family typewriter +EMUFS_BLOCK_ID +\family default + indica el número de bloque \layout Itemize -EMUFS_FREE freespace indica la cantidad de espacio libre que queda en el - bloque. + +\family typewriter +EMUFS_FREE +\family default + freespace indica la cantidad de espacio libre que queda en el bloque. \layout Standard -EMUFS_FSC y EMUFS_FREE son + +\family typewriter +EMUFS_FSC +\family default + y +\family typewriter +EMUFS_FREE +\family default + son \emph on unsiged long int \layout Subsection @@ -340,8 +518,11 @@ Comportamiento Archivo de índices recuperables \layout Standard -Este archivo funciona como una pila de id`s borrados, es decir, cuando se - borra un registro el +Este archivo funciona como una pila de i +\emph on +d`s +\emph default + borrados, es decir, cuando se borra un registro el \emph on id \emph default @@ -356,8 +537,11 @@ id`s Estructura Física \layout Standard -Este archivo tiene registros de un solo campo, EMUFS_REG_ID el cual simboliza - al id almacenado. +Este archivo tiene registros de un solo campo, +\family typewriter +EMUFS_REG_ID +\family default + el cual simboliza al id almacenado. \layout Subsection Comportamiento @@ -384,8 +568,8 @@ id \emph default al archivo, el cual será el primero recuperado. -\emph on -ver: emufs_did_agregar() +\family typewriter +Ver: emufs_did_agregar() \layout Itemize @@ -399,8 +583,8 @@ id que se guardó en el archivo (o se eliminó del archivo de datos), y trunca el archivo. -\emph on -ver: emufs_did_get_last() +\family typewriter +Ver: emufs_did_get_last() \layout Chapter @@ -462,8 +646,11 @@ T1 EMUFS_Tipo \family default ). - Luego le sigue una cabecera propia del archivo (un EMUFS_BLOCK_SIZE, 4 - bytes) que almacena el tamaño del bloque que usa el archivo. + Luego le sigue una cabecera propia del archivo (un +\family typewriter +EMUFS_BLOCK_SIZE +\family default +, 4 bytes) que almacena el tamaño del bloque que usa el archivo. De esta menera, al abrir un archivo de este tipo no se necesita tener ninguna información sobre él. A esta cabecera le siguen cero o más bloques del tamaño fijo especificado @@ -644,12 +831,14 @@ NOMBRE, ARREGLAME!!!! Como se puede observar, a nivel físico cada registro grabado esta compuesto por un Header cuyo tamaño total es de 8 bytes ( +\family typewriter \series bold EMUFS_REG_ID \series default + \series bold EMUFS_REG_SIZE +\family default \series default ), y posteriormente el registro (bloque de datos) en sí. Luego se encuentra el espacio libre de 18 bytes dejado por el registro @@ -743,12 +932,16 @@ As \layout Enumerate Calculamos el espacio que necesitaremos para el registro: sizeof( +\family typewriter \series bold EMUFS_REG_ID +\family default \series default ) + sizeof( +\family typewriter \series bold EMUFS_REG_SIZE +\family default \series default ) + sizeof(registro). \layout Enumerate @@ -1301,6 +1494,14 @@ que pudieron haberse formado por la eliminaci por otros. \layout Standard +Al estar utilizando recuperación de +\emph on +id`s +\emph default + borrados, esto me asegura que el registro borrado-guardado conservará el + id al grabarse. +\layout Standard + Al finalizar este proceso se verifica si existen bloques vacios para truncar el archivo. Lo mismo se debe hacer con el archivo de espacios libres . -- 2.43.0