From f5f9e412009380bc5aea316c9ff48ea379f17f0c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Tue, 13 Apr 2004 05:01:09 +0000 Subject: [PATCH 1/1] algunas estadisticas --- emufs/emufs.h | 7 +++++++ emufs/fsc.c | 26 ++++++++++++++++++++++++++ emufs/fsc.h | 3 ++- emufs/idx.c | 37 +++++++++++++++++++++++++++++++++---- emufs/idx.h | 2 ++ emufs/tipo3.c | 26 ++++++++++++++++++++++++++ emufs/tipo3.h | 2 ++ emufs/tipo3_main.c | 14 +++++++++----- 8 files changed, 107 insertions(+), 10 deletions(-) diff --git a/emufs/emufs.h b/emufs/emufs.h index fb7dbcd..fd2c9ca 100644 --- a/emufs/emufs.h +++ b/emufs/emufs.h @@ -84,6 +84,13 @@ typedef unsigned long EMUFS_OFFSET; /** Estadisticas de archivo */ typedef struct _emufs_est_t { unsigned long tam_archivo; + unsigned long tam_archivo_bytes; + unsigned long info_control; + EMUFS_FREE media_fs; + EMUFS_FREE total_fs; + EMUFS_FREE max_fs; + EMUFS_FREE min_fs; + int cant_bloques; } EMUFS_Estadisticas; /** Tipo Abstracto para menajo de archivos. diff --git a/emufs/fsc.c b/emufs/fsc.c index 164050e..17a7244 100644 --- a/emufs/fsc.c +++ b/emufs/fsc.c @@ -342,3 +342,29 @@ EMUFS_FREE emufs_fsc_get_total_fs(EMUFS *emu) fclose(f_fsc); return total; } +/* +EMUFS_FREE emufs_fsc_get_max_min_fs(EMUFS *emu, int *min, int *max) +{ + FILE *f_fsc; + EMUFS_FSC reg; + char name_f_fsc[255]; + + strcpy(name_f_fsc,emu->nombre); + strcat(name_f_fsc, EMUFS_FSC_EXT); + + *min = emu->tam_bloque; + *max = 0; + if ( (f_fsc = fopen(name_f_fsc,"r"))==NULL ) return -1; + + while ( !feof(f_fsc) ){ + fread(®, sizeof(EMUFS_FSC), 1, f_fsc); + if ( reg.freespace < *min ) + *min = reg.freespace; + if ( reg.freespace > *max ) + *max = reg.freespace; + } + + fclose(f_fsc); + return 0; +} +*/ diff --git a/emufs/fsc.h b/emufs/fsc.h index ec932df..e331b18 100644 --- a/emufs/fsc.h +++ b/emufs/fsc.h @@ -45,7 +45,7 @@ typedef struct emufs_fsc_t { unsigned long int marker; unsigned long int freespace; -} EMUFS_FSC; +}EMUFS_FSC; int emufs_fsc_crear(EMUFS*); int emufs_fsc_agregar(EMUFS *, EMUFS_BLOCK_ID, EMUFS_FREE); @@ -57,5 +57,6 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *, EMUFS_FREE, EMUFS_FREE *); EMUFS_FREE emufs_fsc_get_fs(EMUFS *, EMUFS_BLOCK_ID); /*Devuelve el total de espacio libre que queda en el .dat*/ EMUFS_FREE emufs_fsc_get_total_fs(EMUFS *); +/*EMUFS_FREE emufs_fsc_get_max_min_fs(EMUFS *, int *, int *);*/ #endif /* _EMUFS_FSC_H */ diff --git a/emufs/idx.c b/emufs/idx.c index f465d20..7e48545 100644 --- a/emufs/idx.c +++ b/emufs/idx.c @@ -233,8 +233,10 @@ EMUFS_REG_ID emufs_idx_get_count(EMUFS *emu) strcpy(name_f_idx,emu->nombre); strcat(name_f_idx, EMUFS_IDX_EXT); - fp = fopen(name_f_idx, "rb"); - if (fp == NULL) return 0; + if ( (fp = fopen(name_f_idx, "rb"))==NULL){ + PERR("No se pudo abrir el archvo"); + return -1; + } fseek(fp, 0l, SEEK_END); tam = ftell(fp); @@ -252,8 +254,10 @@ EMUFS_REG_ID emufs_idx_get_id_at(EMUFS *emu, long pos) strcpy(name_f_idx,emu->nombre); strcat(name_f_idx, EMUFS_IDX_EXT); - fp = fopen(name_f_idx, "rb"); - if (fp == NULL) return EMUFS_NOT_FOUND; + if ( (fp = fopen(name_f_idx, "rb")) == NULL){ + PERR("No se pudo abrir el archivo"); + return -1; + } fseek(fp, pos*sizeof(EMUFS_IDX), SEEK_SET); fread(&id, sizeof(EMUFS_IDX), 1, fp); @@ -261,3 +265,28 @@ EMUFS_REG_ID emufs_idx_get_id_at(EMUFS *emu, long pos) return id.id_reg; } + +int emufs_idx_existe_id(EMUFS *emu, int ID) +{ + FILE *fp; + char name_f_idx[255]; + EMUFS_IDX id; + + strcpy(name_f_idx,emu->nombre); + strcat(name_f_idx, EMUFS_IDX_EXT); + + if ( (fp = fopen(name_f_idx, "rb")) == NULL){ + PERR("No se pudo abrir el archivo"); + return -1; + } + + while ( !feof(fp) ){ + fread(&id, sizeof(EMUFS_IDX), 1, fp); + if ( id.id_reg == ID ){ + fclose(fp); + return 0; + } + } + fclose(fp); + return -1; +} diff --git a/emufs/idx.h b/emufs/idx.h index 605bf1b..1b94da4 100644 --- a/emufs/idx.h +++ b/emufs/idx.h @@ -67,4 +67,6 @@ EMUFS_REG_ID emufs_idx_get_id_at(EMUFS *, long pos); EMUFS_REG_ID emufs_idx_get_new_id(EMUFS*, int*); +int emufs_idx_existe_id(EMUFS *emu, int ID); + #endif /* _EMUFS_IDX_H */ diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 0e657e9..0a457f9 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -276,3 +276,29 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) free(bloque); return 0; } + +EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu) +{ + FILE *f; + EMUFS_Estadisticas stats; + char name_f[255]; + + 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; + } + /* No hace falta el fseek ¿? */ + fseek(f,0,SEEK_END); + stats.tam_archivo_bytes = ftell(f); + stats.cant_bloques = ( ftell(f) - sizeof(EMUFS_Tipo) - sizeof(EMUFS_BLOCK_SIZE) - sizeof(EMUFS_REG_SIZE) )/ emu->tam_bloque; + stats.tam_archivo = emufs_idx_get_count(emu); + stats.total_fs = emufs_fsc_get_total_fs(emu); + /*verificar el segentado*/ + stats.info_control = stats.tam_archivo*sizeof(EMUFS_REG_ID) + sizeof(EMUFS_Tipo) + sizeof(EMUFS_BLOCK_SIZE) + sizeof(EMUFS_REG_SIZE); + stats.media_fs = stats.total_fs/stats.cant_bloques; + fclose(f); + return stats; + +} diff --git a/emufs/tipo3.h b/emufs/tipo3.h index 57f60a4..f99a658 100644 --- a/emufs/tipo3.h +++ b/emufs/tipo3.h @@ -63,4 +63,6 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID id_reg); int emufs_tipo3_buscar_registro(EMUFS *emu, EMUFS_REG_ID id_reg); +EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *); + #endif /* _EMUFS_TIPO3_H_ */ diff --git a/emufs/tipo3_main.c b/emufs/tipo3_main.c index 593f14f..517350c 100644 --- a/emufs/tipo3_main.c +++ b/emufs/tipo3_main.c @@ -35,7 +35,8 @@ #include #include #include "emufs.h" - +#include "fsc.h" +#include "tipo3.h" int main(int argc, char *argv[]) { EMUFS *fp; @@ -50,8 +51,8 @@ int main(int argc, char *argv[]) char h[100]; char i[100]; char* b_ptr; - int err = 0; - + int err = 0, max, min; + EMUFS_Estadisticas s; if (argc != 2) { printf("Modo de uso : %s tam_bloque\n", argv[0]); return 1; @@ -100,8 +101,11 @@ int main(int argc, char *argv[]) free(b_ptr); ver_archivo_FS(fp); - - emufs_destruir(fp); + s = emufs_tipo3_leer_estadisticas(fp); + printf("tam_archivo = %d\ntam_archivo_bytes = %d\ninfo_control = %d\n",s.tam_archivo,s.tam_archivo_bytes,s.info_control); + printf("media_fs = %d\ntotal_fs = %d\ncant_bloques = %d\n",s.media_fs, s.total_fs,s.cant_bloques); + +emufs_destruir(fp); return 0; } -- 2.43.0