X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/ac583cb9b8af5a1113b3db96752d5e3592d1c212..acdd87dea6a2cd494a91cce3bc87d0a356c0df70:/emufs/tipo3.c diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 80ffdd4..0a457f9 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -49,15 +49,14 @@ void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, /*si existe, lo busco en el archivo de bloques*/ block = emufs_idx_buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/ - printf("el bloque es = %d\n",block); if ( block == EMUFS_NOT_FOUND ){ - printf("No se encontro el bloque\n"); + PERR("No se encontro el bloque"); return NULL; } if ((bloque = emufs_tipo3_leer_bloque(emu, block, err)) == NULL) { /* TODO Manejo de errores, queda en el codigo de error lo que devolvio * emufs_tipo3_leer_bloque() */ - printf("no se pudo leer el bloque\n"); + PERR("no se pudo leer el bloque"); return NULL; /*No se pudo leer el bloque*/ } @@ -71,7 +70,7 @@ void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, if (registro == NULL) { /* TODO Manejo de errores */ free(bloque); - printf("No hay memoria.\n"); + PERR("No hay memoria"); *err = 2; /* EMUFS_ERROR_OUT_OF_MEMORY */ return NULL; } @@ -100,20 +99,20 @@ void* emufs_tipo3_leer_bloque(EMUFS *emu, EMUFS_REG_ID ID, int* err) *err = 4; /* EMUFS_ERROR_CANT_OPEN_FILE */ return NULL; /* FIXME ERROR */ } - fseek(file,sizeof(EMUFS_TYPE)+sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE),SEEK_SET); + fseek(file,sizeof(EMUFS_Tipo)+sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE),SEEK_SET); /*FIXME: verificar que no se pase de fin de archivo*/ fseek(file,ID*emu->tam_bloque,SEEK_CUR); block = (char*) malloc(emu->tam_bloque); if (block == NULL) { /* TODO Manejo de errores */ - printf("No hay memoria.\n"); + PERR("No hay memoria"); *err = 2; /* EMUFS_ERROR_OUT_OF_MEMORY */ return NULL; } if (fread(block, emu->tam_bloque, 1, file) != 1) { /* TODO Manejo de errores */ free(block); - printf("Error al leer bloque.\n"); + PERR("Error al leer bloque"); *err = 3; /* EMUFS_ERROR_FILE_READ */ return NULL; } @@ -157,7 +156,7 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t /*tengo que buscar la cantidad de bloques que existen*/ /*me paro al principio salteando el encabezado del archivo*/ fseek(file, 0, SEEK_END); /* Me paro al final */ - cant = (ftell(file)-(sizeof(EMUFS_TYPE)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE))) / emu->tam_bloque; + cant = (ftell(file)-(sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE))) / emu->tam_bloque; cant--; /* Resto uno porque el numero de bloque debe empezar en 0 */ fclose(file); num_bloque = cant; @@ -170,7 +169,7 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t /*cargo el bloque en "bloque"*/ if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque, err))) { /* TODO Manejo de errores */ - printf("no se pudo leer el bloque\n"); + PERR("no se pudo leer el bloque"); return -1; } /*El error puede haberse producido porque la funcion leer_bloque devolvio -1, el cual es un bloque invalido*/ @@ -182,7 +181,7 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t /*grabo el registro en el bloque*/ memcpy(bloque+emu->tam_bloque-fs+sizeof(EMUFS_REG_ID),ptr,emu->tam_reg); if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) != 0) { - printf("error al grabar bloque\n"); + PERR("error al grabar bloque"); return -1; /* se produjo un error */ } /*actualizo el archivo de espacios libres*/ @@ -213,7 +212,7 @@ int emufs_tipo3_grabar_bloque(EMUFS *emu, void *ptr, EMUFS_BLOCK_ID num) if ( (file = fopen(name_f,"r+"))==NULL ) return -1; /*ERROR*/ /* Salto el header del archivo */ - fseek(file, sizeof(EMUFS_TYPE)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE), SEEK_SET); + fseek(file, sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE), SEEK_SET); fseek(file, num*emu->tam_bloque, SEEK_CUR); fwrite(ptr, emu->tam_bloque, 1, file); @@ -235,7 +234,7 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) num_bloque = emufs_idx_buscar_registro(emu, ID); if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque, &err))) { /* TODO Manejo de errores */ - printf("no se pudo leer el bloque\n"); + PERR("no se pudo leer el bloque"); return -1; } @@ -260,7 +259,7 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) /*grabo el bloque en el archivo*/ if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) == -1 ){ free(bloque); - printf("No se pudo grabar el bloque\n"); + PERR("No se pudo grabar el bloque"); return -1; } @@ -277,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; + +}