From: Alan Kennedy Date: Sun, 18 Apr 2004 18:25:22 +0000 (+0000) Subject: Cambios en la estructura de estadisticas discutidos en la lista. POR FAVOR chequeen... X-Git-Tag: svn_import_r684~362 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/7a1f4e670b7f52961de1c6c0b868aa836cceae04?ds=sidebyside Cambios en la estructura de estadisticas discutidos en la lista. POR FAVOR chequeen sus tipos (tipo1 y tipo3) para ver que no me haya mandado cagada y habria que hacer una mini pruebita de stats con calculadora en mano. Yo la hize con mi tipo2, si estan muy a full, me ocupo de hacerla con los otros dos, pero avisen --- diff --git a/emufs/emufs.h b/emufs/emufs.h index db36963..f9459b7 100644 --- a/emufs/emufs.h +++ b/emufs/emufs.h @@ -82,15 +82,15 @@ typedef unsigned long EMUFS_OFFSET; * - info_control a tam_info_control */ typedef struct _emufs_est_t { - unsigned long tam_archivo; /**< Cantidad de Registros en el archivo */ - unsigned long tam_archivo_bytes;/**< Size del archivo en bytes */ - unsigned long tam_datos_bytes;/**< Cantidad de bytes en datos */ - unsigned long info_control;/**< Cantidad de bytes en info de control */ + unsigned long tam_archivo;/**< Tamaño en bytes del archivo .dat */ + unsigned long tam_archivo_aux;/**< Tamaño en bytes de los archivos auxiliares sumados */ + unsigned long tam_info_control_dat;/**< Cantidad de bytes en info de control del .dat */ unsigned long media_fs;/**< Media del espacio libre en el archivo de datos */ unsigned long total_fs;/**< Cantidad total de espacio libre en el archivo de datos */ unsigned long max_fs;/**< Cantidad de maxima libre (gap o fs en bloque) en el archivo de datos */ unsigned long min_fs;/**< Cantidad de minima libre (gap o fs en bloque) en el archivo de datos */ unsigned long cant_bloques; /**< Cantidad de bloques en el archivo de datos */ + unsigned long cant_registros; /**< Cantidad de Registros en el archivo */ } EMUFS_Estadisticas; /** Tipo Abstracto para menajo de archivos. diff --git a/emufs/tipo1.c b/emufs/tipo1.c index f672c19..c76311e 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -477,7 +477,7 @@ int emufs_tipo1_borrar_registro(EMUFS* efs, EMUFS_REG_ID reg_id) EMUFS_Estadisticas emufs_tipo1_leer_estadisticas(EMUFS* efs) { - int err = 0; + int err = 0,err1 = 0, err2 = 0, err3 = 0; EMUFS_Estadisticas stats; memset(&stats, 0, sizeof(EMUFS_Estadisticas)); @@ -485,32 +485,40 @@ EMUFS_Estadisticas emufs_tipo1_leer_estadisticas(EMUFS* efs) char name_f[255]; strcpy(name_f, efs->nombre); strcat(name_f, ".dat"); - stats.tam_archivo_bytes = emufs_common_get_file_size(name_f, &err); + stats.tam_archivo = emufs_common_get_file_size(name_f, &err); if (err) { PERR("no se pudo obtener el tamaño del archivo"); return stats; } } - /* obtengo cantidad de bloques */ - stats.cant_bloques = (stats.tam_archivo_bytes - emufs_tipo1_header_size()) + /* obtengo cantidad de bloques en el archivo */ + stats.cant_bloques = (stats.tam_archivo - emufs_tipo1_header_size()) / efs->tam_bloque; /* obtengo la cantidad de registros en el archivo */ { - EMUFS_REG_ID *tmp = emufs_idx_get(efs, &stats.tam_archivo); + EMUFS_REG_ID *tmp = emufs_idx_get(efs, &stats.cant_registros); if (tmp) free(tmp); /* libera memoria innecesaria */ } - /* obtengo total de información de control que guarda el archivo */ - stats.info_control = emufs_tipo1_header_size() /* cabecera del archivo */ + /* obtengo información de control que guarda el archivo .dat */ + stats.tam_info_control_dat = emufs_tipo1_header_size() /* cabecera del archivo */ /* mas las cabeceras de todos los registros */ - + stats.tam_archivo * sizeof(EMUFS_TIPO1_REG_HEADER); + + stats.cant_registros * sizeof(EMUFS_TIPO1_REG_HEADER); /* obtengo las estadísticas del archivo de espacio libre por bloque */ stats.total_fs = emufs_fsc_get_total_fs(efs); stats.media_fs = emufs_fsc_get_media_fs(efs); emufs_fsc_get_max_min_fs(efs, &stats.min_fs, &stats.max_fs); + + /* obtengo informacion de control guardada por los archivos auxiliares */ + stats.tam_archivo_aux = emufs_idx_get_file_size(efs,&err1) + emufs_fsc_get_file_size(efs,&err2) + + emufs_did_get_file_size(efs,&err3); + if (err1 || err2 || err3) { + PERR("Hubo problemas en lectura de filesize archivos auxiliares"); + return stats; + } return stats; } @@ -715,4 +723,3 @@ void emufs_tipo1_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c (*siguiente) = emufs_tipo1_leer_bloque(efs, id+1, &err); (*size1) = (*size2) = (*size3) = efs->tam_bloque; } - diff --git a/emufs/tipo2.c b/emufs/tipo2.c index 40ff8d2..a1925db 100644 --- a/emufs/tipo2.c +++ b/emufs/tipo2.c @@ -247,23 +247,28 @@ EMUFS_Estadisticas emufs_tipo2_leer_estadisticas(EMUFS *efs) { EMUFS_Estadisticas stats; EMUFS_REG_ID *tmp; - unsigned long fsc_size = 0,idx_size = 0; + int err = 0, err1 = 0, err2 = 0, err3 = 0; char name_f[255]; - FILE *file; - - strcpy(name_f,efs->nombre); - strcat(name_f,".dat"); /* Inicializo las stats por si hay error somewhere */ stats.tam_archivo = 0; - stats.tam_archivo_bytes = 0; - stats.tam_datos_bytes = 0; - stats.info_control = 0; + stats.tam_archivo_aux = 0; + stats.tam_info_control_dat = 0; stats.media_fs = 0; stats.total_fs = 0; stats.max_fs = 0; stats.min_fs = 0; stats.cant_bloques = 0; + stats.cant_registros = 0; + + /* Obtengo el tamaño del .dat */ + strcpy(name_f,efs->nombre); + strcat(name_f,".dat"); + stats.tam_archivo = emufs_common_get_file_size(name_f,&err); + if (err) { + PERR("no se pudo obtener el tamaño del archivo"); + return stats; + } /* Obtengo las stats de FSC */ stats.total_fs = emufs_fsc_get_total_fs(efs); @@ -271,43 +276,19 @@ EMUFS_Estadisticas emufs_tipo2_leer_estadisticas(EMUFS *efs) emufs_fsc_get_max_min_fs(efs,&stats.min_fs,&stats.max_fs); /* Cant registros */ - tmp = emufs_idx_get(efs,&stats.tam_archivo); - free(tmp); - - /* Size del archivo de datos */ - if ( (file = fopen(name_f,"ab")) == NULL){ - PERR("No se pudo abrir el archivo"); - return stats; - } - stats.tam_archivo_bytes = ftell(file); - fclose(file); - - /* Size del archivo de Espacio Libre */ - strcpy(name_f,efs->nombre); - strcat(name_f,EMUFS_FSC_EXT); - if ( (file = fopen(name_f,"ab")) == NULL){ - PERR("No se pudo abrir el archivo"); - return stats; - } - fsc_size = ftell(file); - fclose(file); - - /* Size del archivo Indice */ - strcpy(name_f,efs->nombre); - strcat(name_f,EMUFS_IDX_EXT); - if ( (file = fopen(name_f,"ab")) == NULL){ - PERR("No se pudo abrir el archivo"); - return stats; - } - idx_size = ftell(file); - fclose(file); - - /* Cantidad de Bytes en info de control */ - stats.info_control = idx_size + fsc_size + sizeof(EMUFS_REG_ID)*stats.tam_archivo + sizeof(EMUFS_REG_SIZE)*stats.tam_archivo + sizeof(EMUFS_Tipo); - - /* Cantida de Bytes en Datos */ - stats.tam_datos_bytes = stats.tam_archivo_bytes - sizeof(EMUFS_Tipo) - (sizeof(EMUFS_REG_ID) + sizeof(EMUFS_REG_SIZE)) * stats.tam_archivo; - + tmp = emufs_idx_get(efs,&stats.cant_registros); + if (tmp) free(tmp); + + /* Cantidad de bytes de info de control del .dat */ + stats.tam_info_control_dat = (sizeof(EMUFS_REG_ID) + sizeof(EMUFS_REG_SIZE)) * stats.cant_registros + sizeof(EMUFS_Tipo); + + /* Cantidad de bytes en info de control archivos auxiliares */ + stats.tam_archivo_aux = emufs_idx_get_file_size(efs,&err1) + emufs_fsc_get_file_size(efs,&err2) + emufs_did_get_file_size(efs,&err3); + if (err1 || err2 || err3) { + PERR("Hubo problemas en lectura de filesize archivos auxiliares"); + return stats; + } + return(stats); } diff --git a/emufs/tipo2_main.c b/emufs/tipo2_main.c index cc3b204..16072d0 100644 --- a/emufs/tipo2_main.c +++ b/emufs/tipo2_main.c @@ -108,14 +108,14 @@ int main(int argc, char *argv[]) /* Obtengo stats */ stats = efs->leer_estadisticas(efs); - 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("Size del Archivo de datos: %lu\n",stats.tam_archivo); + printf("Cantidad de Registros en el Archivo de datos: %lu\n",stats.cant_registros); 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); - printf("Cantidad de bytes en datos: %lu\n",stats.tam_datos_bytes); + printf("Cantidad en bytes de informacion de control: %lu\n",stats.tam_info_control_dat+stats.tam_archivo_aux); + printf("Cantidad de bytes en datos: %lu\n",stats.tam_archivo-stats.tam_info_control_dat); /* Recompacto */ printf("Recompactando...\n"); @@ -123,14 +123,14 @@ int main(int argc, char *argv[]) /* Obtengo stats nevas */ stats = efs->leer_estadisticas(efs); - 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("Size del Archivo de datos: %lu\n",stats.tam_archivo); + printf("Cantidad de Registros en el Archivo de datos: %lu\n",stats.cant_registros); 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); - printf("Cantidad de bytes en datos: %lu\n",stats.tam_datos_bytes); + 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.tam_info_control_dat+stats.tam_archivo_aux); + printf("Cantidad de bytes en datos: %lu\n",stats.tam_archivo-stats.tam_info_control_dat-stats.total_fs); emufs_destruir(efs); diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 999bb6d..5cb9c2b 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -380,33 +380,48 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu) { - FILE *f; + int err = 0,err1 = 0, err2 = 0, err3 = 0; EMUFS_Estadisticas stats; - EMUFS_REG_ID *tmp; - char name_f[255]; - memset(&stats,0,sizeof(EMUFS_Estadisticas)); - strcpy(name_f,emu->nombre); - strcat(name_f,".dat"); - if ( (f = fopen(name_f,"r")) == NULL){ - PERR("No se pudo abrir el archivo"); - return stats; + + { /* obtengo tamaño del archivo en bytes */ + char name_f[255]; + strcpy(name_f, emu->nombre); + strcat(name_f, ".dat"); + stats.tam_archivo = emufs_common_get_file_size(name_f, &err); + if (err) { + PERR("no se pudo obtener el tamaño del archivo"); + return stats; + } } - fseek(f,0,SEEK_END); - stats.tam_archivo_bytes = ftell(f); - stats.cant_bloques = (stats.tam_archivo_bytes-sizeof(EMUFS_Tipo)-sizeof(EMUFS_BLOCK_SIZE)-sizeof(EMUFS_REG_SIZE))/ + /* obtengo la cantidad de bloques en el archivo */ + stats.cant_bloques = (stats.tam_archivo-sizeof(EMUFS_Tipo)-sizeof(EMUFS_BLOCK_SIZE)-sizeof(EMUFS_REG_SIZE))/ emu->tam_bloque; - tmp = emufs_idx_get(emu, &stats.tam_archivo); - if (tmp) free(tmp); - stats.info_control = stats.tam_archivo*sizeof(EMUFS_REG_ID)+sizeof(EMUFS_Tipo)+ + + /* obtengo la cantidad de registros en el archivo */ + { + EMUFS_REG_ID *tmp = emufs_idx_get(emu, &stats.cant_registros); + if (tmp) free(tmp); /* libera memoria innecesaria */ + } + + /* obtengo información de control que guarda el archivo .dat */ + stats.tam_info_control_dat = stats.cant_registros*sizeof(EMUFS_REG_ID)+sizeof(EMUFS_Tipo)+ sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE); + /* Obtengo las stats de FSC */ stats.total_fs = emufs_fsc_get_total_fs(emu); stats.media_fs = emufs_fsc_get_media_fs(emu); emufs_fsc_get_max_min_fs(emu,&stats.min_fs,&stats.max_fs); + + /* obtengo informacion de control guardada por los archivos auxiliares */ + stats.tam_archivo_aux = emufs_idx_get_file_size(emu,&err1) + emufs_fsc_get_file_size(emu,&err2) + + emufs_did_get_file_size(emu,&err3); + if (err1 || err2 || err3) { + PERR("Hubo problemas en lectura de filesize archivos auxiliares"); + return stats; + } - fclose(f); return stats; }