]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
algunas estadisticas
authorNicolás Dimov <ndimov@gmail.com>
Tue, 13 Apr 2004 05:01:09 +0000 (05:01 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Tue, 13 Apr 2004 05:01:09 +0000 (05:01 +0000)
emufs/emufs.h
emufs/fsc.c
emufs/fsc.h
emufs/idx.c
emufs/idx.h
emufs/tipo3.c
emufs/tipo3.h
emufs/tipo3_main.c

index fb7dbcdc268c7d728cb3a24011b0d04923e8b633..fd2c9cabfcc86582f47181af03c5ff31fafeba6d 100644 (file)
@@ -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.
index 164050ec0603b192a698146a4395e1e80eed2b4e..17a7244215fc1b792b9e3dc7e328e5d2631f8633 100644 (file)
@@ -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(&reg, 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;
+}
+*/
index ec932df18d399cf61024423b3346fe5bacc38b91..e331b1808f59bff87eaeab7ed21646528995bd33 100644 (file)
@@ -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 */
index f465d208635742bf99e1e4aa87c107da08bc0510..7e485451a84b06c8308017673c1589fdadd788ab 100644 (file)
@@ -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;
+}
index 605bf1b01d7b8a37e29db66ba8e2f237ca36b4c0..1b94da4c8ce88f1def55663b404c9931efdc5799 100644 (file)
@@ -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 */
index 0e657e926710630764002f12dd3f5422d4729a31..0a457f911e106cb8fd09d8961d021e476d0b1f71 100644 (file)
@@ -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;
+       
+}
index 57f60a42cfacbb4c53b124cfe8d6dfa4baa94397..f99a658ce8cb24e4c9125369571b15dbb85d201c 100644 (file)
@@ -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_ */
index 593f14f5d664cf213fbc675e0927712225f8eccd..517350cc9638076cec56fa098e84a65b997c7365 100644 (file)
@@ -35,7 +35,8 @@
 #include <stdio.h>
 #include <string.h>
 #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;
 }