/** 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.
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;
+}
+*/
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);
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 */
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);
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);
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;
+}
EMUFS_REG_ID emufs_idx_get_new_id(EMUFS*, int*);
+int emufs_idx_existe_id(EMUFS *emu, int ID);
+
#endif /* _EMUFS_IDX_H */
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;
+
+}
int emufs_tipo3_buscar_registro(EMUFS *emu, EMUFS_REG_ID id_reg);
+EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *);
+
#endif /* _EMUFS_TIPO3_H_ */
#include <stdio.h>
#include <string.h>
#include "emufs.h"
-
+#include "fsc.h"
+#include "tipo3.h"
int main(int argc, char *argv[])
{
EMUFS *fp;
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;
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;
}