* - 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.
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));
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;
}
(*siguiente) = emufs_tipo1_leer_bloque(efs, id+1, &err);
(*size1) = (*size2) = (*size3) = efs->tam_bloque;
}
-
{
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);
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);
}
/* 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");
/* 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);
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;
}