From 6ab80bf240d2eb2ea434b259b3cb8440ca70aaa9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Mon, 19 Apr 2004 00:18:04 +0000 Subject: [PATCH] cambio los tipos de EMUFS_FSC y agrego doxycomentarios en tipo3.h --- doc/informe.lyx | 15 ++++++++++++- emufs/fsc.h | 4 ++-- emufs/tipo3.c | 4 +--- emufs/tipo3.h | 31 ++++++++++++++++++++----- emufs/tipo3_main.c | 56 ++++------------------------------------------ 5 files changed, 46 insertions(+), 64 deletions(-) diff --git a/doc/informe.lyx b/doc/informe.lyx index e82c549..b568fdc 100644 --- a/doc/informe.lyx +++ b/doc/informe.lyx @@ -168,9 +168,22 @@ Comportamiento (funciones generales) \layout Section Archivo de control de espacio libre (.fsc) +\layout Subsection + +Estructura Física \layout Standard -idem anterior +La estuctura que define este archivo es la siguiente: +\layout Standard + +EMUFS_FSC que contiene +\layout Itemize + +EMUFS_BLOCK_ID indica el número de bloque +\layout Itemize + +EMUFS_FREE freespace indica la cantidad de espacio libre que queda en el + bloque. \layout Section Archivo de índices recuperables (.did) diff --git a/emufs/fsc.h b/emufs/fsc.h index 1843926..08cf1e6 100644 --- a/emufs/fsc.h +++ b/emufs/fsc.h @@ -43,8 +43,8 @@ #define EMUFS_FSC_EXT ".fsc" typedef struct emufs_fsc_t { - unsigned long int marker; - unsigned long int freespace; + EMUFS_BLOCK_ID marker; + EMUFS_FREE freespace; } EMUFS_FSC; /** Crea un archivo de Gaps o Espacio Libre en Bloque */ diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 51a5f52..02c6495 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -502,9 +502,7 @@ void emufs_tipo3_compactar(EMUFS *emu) ID_aux = emufs_tipo3_grabar_registro(emu, reg, emu->tam_reg, &err); free(reg); } - /*tengo que truncar el archivo*/ - /*bloques_vacios = emufs_fsc_get_cant_bloques_vacios(emu)-1; - */ + /*trunco el archivo sacando los bloques vacios*/ block_id = emufs_fsc_buscar_lugar(emu, emu->tam_bloque, &fs); size = sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE)+block_id*emu->tam_bloque; if (truncate(name, size)!=0) diff --git a/emufs/tipo3.h b/emufs/tipo3.h index 508f396..4292065 100644 --- a/emufs/tipo3.h +++ b/emufs/tipo3.h @@ -47,25 +47,44 @@ #include "idx.h" #include "fsc.h" -/** Lee el registro \param id_reg y lo almacena en \param ptr */ -void* emufs_tipo3_leer_registro(EMUFS*, EMUFS_REG_ID, EMUFS_REG_SIZE*, int*); +/** Devuelve un puntero con la memoria reservada que contiene al registro solicitado + * por el segundo parámetro \param ID, y almacena en \param reg_size el tamaño del + * registro leido, que en este caso no es necesario pues es constante y es conocicdo de antemano. + * Para realizar esta acción, busca en el archivo .idx el bloque al cual pertenece el registro. + */ +void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, EMUFS_REG_SIZE* reg_size, int* err); -/** Lee el bloque \param num_bloque y lo almacena en \param ptr */ +/** Devuelve un puntero con la memoria reservada que contiene el bloque solicitado por + * el segundo parámetro \param num_bloque. Como la numeración de los bloques es virtual, + * el acceso al archivo para levantar un bloque es directo, es decir, se posiciona directamente + * en en número de bloque multiplicado por el tamaño del mismo, salteando antes el encabezado del archivo. + */ void* emufs_tipo3_leer_bloque(EMUFS*, EMUFS_BLOCK_ID, int*); -/** Graba el registro apuntado por \param ptr en el archivo */ +/** Graba un registro en un bloque donde haya espacio suficiente, y si no + * crea un nuevo bloque y lo agrega al final del archivo. + * El registro a grabar es apuntado por el segundo parámetro \param ptr + * y el tamaño viene indicado en \param tam. + * Luego de realizar la grabación, actualiza los archivos índice con los + * valores correspondientes. + */ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE, int*); /** Graba el bloque apuntado por \param ptr en el archivo */ int emufs_tipo3_grabar_bloque(EMUFS *emu, void *ptr, EMUFS_BLOCK_ID num_bloque); -/** Borra el registro \param id_reg del archivo de datos */ +/** Borra el registro \param id_reg del archivo de datos, y actualiza los archivos + * de índice para mantener la coherencia en las próximas modificaciones. + */ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID id_reg); /** Método para modificar un registro */ EMUFS_REG_ID emufs_tipo3_modificar_registro(EMUFS *emu, EMUFS_REG_ID, void*, EMUFS_REG_SIZE, int*); -/** Carga una estructura del tipo EMUFS_Estadisticas con las estadisticas del archivo */ +/** Completa una estructura del tipo EMUFS_Estadisticas con las estadísticas del + * archivo de datos, espacio libre total, cantidad de registros, cantidad de bloques, + * tamaño del archivo en bytes, relaciones entre tamaños y espacios libres, etc. + */ EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *); /** Lee un registro con su informacion de control */ diff --git a/emufs/tipo3_main.c b/emufs/tipo3_main.c index cdc26b2..6651fb1 100644 --- a/emufs/tipo3_main.c +++ b/emufs/tipo3_main.c @@ -150,63 +150,15 @@ int main(int argc, char *argv[]) fp->compactar(fp); ver_archivo_FS(fp); - - /* - printf("COMPACTANDO........\n"); - fp->compactar(fp); - -ver_archivo_FS(fp); - - for (j=1; j<40; j+=2){ - b_ptr = fp->leer_registro(fp, v[j], ®_size, &err); - printf("Recuperado %d: %s\n",v[j], b_ptr); - free(b_ptr); - } - -/* - for (j=1; j<8; j+=2){ - b_ptr = fp->leer_registro(fp, v[j], ®_size, &err); - printf("Recuperado : %s\n", b_ptr); - free(b_ptr); - } - - printf("GRABANDO REGISTROS....\n"); - v[0] = fp->grabar_registro(fp, a, 100, &err); - v[1] = fp->grabar_registro(fp, c, 100, &err); - v[2] = fp->grabar_registro(fp, d, 100, &err); - v[3] = fp->grabar_registro(fp, e, 100, &err); - v[4] = fp->grabar_registro(fp, f, 100, &err); - v[5] = fp->grabar_registro(fp, g, 100, &err); - v[6] = fp->grabar_registro(fp, h, 100, &err); - v[7] = fp->grabar_registro(fp, i, 100, &err); - v[4] = fp->grabar_registro(fp, f, 100, &err); - v[5] = fp->grabar_registro(fp, g, 100, &err); - v[6] = fp->grabar_registro(fp, h, 100, &err); - v[7] = fp->grabar_registro(fp, i, 100, &err); - - printf("BORRANDO REGISTROS....\n"); - for (j=0; j<8; j+=3){ - fp->borrar_registro(fp, v[j]); - printf("borrado : %lu\n", v[j]); + for (j=0; j<20; j++){ + fp->borrar_registro(fp, j); + printf("borrado : %lu\n", j); } - - printf("COMPACTANDO........\n"); fp->compactar(fp); - - - stats = fp->leer_estadisticas(fp); - printf("Size del Archivo de datos: %lu\n",stats.tam_archivo_bytes); - printf("Cantidad de Registros en el Archivo de datos: %lu\n",stats.tam_archivo); - printf("Total de espacio libre en el .dat: %lu\n",stats.total_fs); - printf("Minimo espacio libre en bloque o gap: %lu\n",stats.min_fs); - printf("Maximo espacio libre en bloque o gap: %lu\n",stats.max_fs); - printf("Media de espacio libre en bloque o gap: %lu\n",stats.media_fs); - printf("Cantidad en bytes de informacion de control: %lu\n",stats.info_control); +ver_archivo_FS(fp); - ver_archivo_FS(fp); -*/ emufs_destruir(fp); return 0; } -- 2.43.0