From: Nicolás Dimov Date: Mon, 5 Apr 2004 20:21:37 +0000 (+0000) Subject: si se intenta racuperar los registros impares anda, si no no... miren el main.c,... X-Git-Tag: svn_import_r684~638 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/85260e82dfbd2205f0e9e2d62bbd48db79149e99?ds=inline si se intenta racuperar los registros impares anda, si no no... miren el main.c, estuve haciendo una pruebas cambiando los tamaños de los bloques. Seguramente estoy guardando mal los registros o el id, sigo examinando --- diff --git a/tipo3/emufs.c b/tipo3/emufs.c index e696d86..cc30d93 100644 --- a/tipo3/emufs.c +++ b/tipo3/emufs.c @@ -141,10 +141,10 @@ int ver_archivo_FS(EMUFS *emu) printf("no pude abrir el archivo %s\n",name_f_block_free); return -1; } - + fread(®,sizeof(reg),1,f_block_free); while ( !feof(f_block_free) ){ - fread(®,sizeof(reg),1,f_block_free); printf(" Bloque = %d Espacio libre = %d\n",reg.block, reg.free_space); + fread(®,sizeof(reg),1,f_block_free); } fclose(f_block_free); diff --git a/tipo3/main.c b/tipo3/main.c index b0da352..8861a4d 100644 --- a/tipo3/main.c +++ b/tipo3/main.c @@ -24,7 +24,7 @@ int main() strcpy(h, "un registro nuevo que se llama H, acompania a G en el bloque 1"); - fp = emufs_crear("articulos", T3, 512, 100); + fp = emufs_crear("articulos", T3, 220, 100); n1 = fp->grabar_registro(fp, a, 100); n2 = fp->grabar_registro(fp, c, 100); @@ -42,7 +42,7 @@ int main() printf("ID6 = %d\n", n6); printf("ID7 = %d\n", n7); - fp->leer_registro(fp, n5, b, 100); + fp->leer_registro(fp, n7, b, 100); printf("Ok\n"); printf("Recuperado : %s\n", b); diff --git a/tipo3/param_cte.c b/tipo3/param_cte.c index 3358cd1..a67db77 100644 --- a/tipo3/param_cte.c +++ b/tipo3/param_cte.c @@ -6,8 +6,6 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) { FILE* f_block_reg; - //FILE* f_block_free; - //FILE* f_reg_exist; char* bloque; char name_f_block_reg[255]; int block, ID_aux; @@ -22,7 +20,6 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) /*si existe, lo busco en el archivo de bloques*/ block = buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/ - printf("buscar registro, bloque = %d\n", block); bloque = (char*)malloc(emu->tam_bloque); if (bloque == NULL) { printf("No hay memoria.\n"); @@ -31,12 +28,14 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) if (leer_bloque(emu, block, bloque)==-1) { free(bloque); + printf("no se pudo leer el bloque\n"); return -1; /*No se pudo leer el bloque*/ } - + printf("el bloque leido es: %s\n",bloque+sizeof(int)); + while ( iterador < emu->tam_bloque ){ memcpy(&ID_aux, bloque+iterador, sizeof(int)); - /*printf("ID_au = %d\n",ID_aux);*/ + printf("ID_aux = %d\n",ID_aux); iterador += sizeof(int); if ( ID_aux == ID ){ memcpy(ptr,bloque+iterador,tam_reg); @@ -44,7 +43,7 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) } iterador += tam_reg; } - /*printf("reg leido = %s\n",(char*)ptr);*/ + printf("reg leido = %s\n",(char*)ptr); fclose(f_block_reg); free(bloque); @@ -146,7 +145,7 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/ /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/ num_bloque = buscar_lugar(emu, tam, &fs); - printf("Lugar %d\n", fs); + /*printf("Lugar %d\n", fs);*/ /*si no hay bloques con suficiente espacio creo un bloque nuevo */ if (num_bloque == -1) { /*crear un nuevo bloque en memoria */ @@ -167,14 +166,14 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) /*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(int)+sizeof(char))) / emu->tam_bloque; + cant = (ftell(file)-(sizeof(int)*2+sizeof(char))) / emu->tam_bloque; cant--; /* Resto uno porque el numero de bloque debe empezar en 0 */ fclose(file); /*cargo el registro*/ reg.block = cant; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/ /* GAZER */ /*printf("FS = %d\n", fs);*/ - reg.free_space = fs-tam; + reg.free_space = emu->tam_bloque - tam; /*lo guardo en el archivo al final "a+"*/ if ( (f_block_free = fopen(name_f_free,"a+"))==NULL ) return -1; /*ERROR*/ fwrite(®,sizeof(reg),1,f_block_free); @@ -192,8 +191,10 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) /*grabo el registro en el bloque*/ memcpy(bloque+emu->tam_bloque-fs+sizeof(int),ptr,tam); /*guardo el bloque en el archivo*/ - if ( grabar_bloque(emu, bloque, num_bloque) != 0) return -1; /* se produjo un error */ - + if ( grabar_bloque(emu, bloque, num_bloque) != 0) { + printf("error al grabar bloque\n"); + return -1; /* se produjo un error */ + } /*actualizo el archivo de espacios libres*/ /*busco el bloque que modifique*/ if ( (f_block_free = fopen(name_f_free,"r+")) == NULL) return -1; /*ERROR*/ @@ -201,7 +202,6 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) fread(®,sizeof(reg),1,f_block_free); if ( reg.block == num_bloque ){ reg.free_space -= tam; - /*me parece que tengo que retroceder una posicion*/ fseek(f_block_free,-sizeof(reg),SEEK_CUR); fwrite(®,sizeof(reg),1,f_block_free); break; @@ -236,7 +236,8 @@ int grabar_bloque(EMUFS *emu, void *ptr, int num) strcat(name_f,".dat"); if ( (file = fopen(name_f,"r+"))==NULL ) return -1; /*ERROR*/ - fseek(file,num*emu->tam_bloque,SEEK_SET); + fseek(file,sizeof(char)+sizeof(int)*2,SEEK_SET); + fseek(file,num*emu->tam_bloque,SEEK_CUR); fwrite(ptr, emu->tam_bloque, 1, file); fclose(file);