From 38e8783579e4b158b1fced1caec93e16ae05afc4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Fri, 9 Apr 2004 23:10:50 +0000 Subject: [PATCH] no encuentro el error, el archivo idx en vez de achicarse crece.... fijense si lo desculan --- emufs/emufs.c | 1 + emufs/idx.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ emufs/idx.h | 3 +++ emufs/tipo3.c | 4 ++++ emufs/tipo3_main.c | 12 +++++------ 5 files changed, 65 insertions(+), 6 deletions(-) diff --git a/emufs/emufs.c b/emufs/emufs.c index 0c529ed..a6a774c 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -245,6 +245,7 @@ int ver_archivo_FS(EMUFS *emu) fclose(f_block_free); /* Imprimo la lista de bloques/registros */ + printf("BLOQUES Y REGISTROS\n"); strcpy(name_f_block_free,emu->nombre); strcat(name_f_block_free,".idx"); { diff --git a/emufs/idx.c b/emufs/idx.c index cc88257..56fa4fc 100644 --- a/emufs/idx.c +++ b/emufs/idx.c @@ -128,3 +128,54 @@ int emufs_idx_agregar(EMUFS *emu, int num_bloque, int ID_aux) return 0; } +int emufs_idx_borrar(EMUFS *emu, int ID) +{ + FILE *f_idx; + EMUFS_IDX reg, buffer; + char name_f_idx[255]; + long actual, final, cant, i, tam; + + strcpy(name_f_idx,emu->nombre); + strcat(name_f_idx, EMUFS_IDX_EXT); + + if ( (f_idx = fopen(name_f_idx,"a+"))==NULL ) return -1; + + while ( !feof(f_idx) ){ + /*busco cual tengo que borrar*/ + if ( fread(®, sizeof(EMUFS_IDX), 1, f_idx) != 1 ) continue; + if ( reg.id_reg == ID ) + break; + } + + /* me paro en el que tengo que borrar */ + actual = fseek(f_idx, -sizeof(EMUFS_IDX), SEEK_CUR); + /*actual = ftell(f_idx); /* Guardo la posicion actual */ + printf("ACTUAL = %ld\n", actual/sizeof(EMUFS_IDX)); + fseek(f_idx, 0, SEEK_END); /* me voy al final */ + final = ftell(f_idx); /* veo cuando ocupa el archivo */ + printf("tamanio del archivo de bloques y registros = %d\n", final/sizeof(EMUFS_IDX)); + fseek(f_idx, actual, SEEK_SET); /* vuelvo al lugar desde donde quiero justificar */ + + cant = (final-actual)/sizeof(EMUFS_IDX); + printf("cant = %d\n", cant); + for(i=0; i +#include #include "emufs.h" #define EMUFS_IDX_EXT ".idx" @@ -58,4 +59,6 @@ int emufs_idx_buscar_registro(EMUFS *, int); int emufs_idx_agregar(EMUFS *, int , int); +int emufs_idx_borrar(EMUFS *emu, int ID); + #endif /* _EMUFS_IDX_H */ diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 05d8bad..5ba6af2 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -245,6 +245,10 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, int ID, unsigned long tam_reg) if ( emufs_did_agregar(emu, ID) != 0 ) return -1; /*actualizo archivo .idx*/ + + if ( emufs_idx_borrar(emu, ID) != 0 ) return -1; + + /*busco el registro que tengo que eliminar*/ /* GAZER VER */ /* if ( (f_block_reg = fopen(name_f_block_reg,"r+")) == NULL ) return -1; diff --git a/emufs/tipo3_main.c b/emufs/tipo3_main.c index cdde077..559a3c9 100644 --- a/emufs/tipo3_main.c +++ b/emufs/tipo3_main.c @@ -74,12 +74,12 @@ int main(int argc, char *argv[]) n1 = fp->grabar_registro(fp, a, 100); n2 = fp->grabar_registro(fp, c, 100); - n3 = fp->grabar_registro(fp, d, 100); + /*n3 = fp->grabar_registro(fp, d, 100); n4 = fp->grabar_registro(fp, e, 100); n5 = fp->grabar_registro(fp, f, 100); n6 = fp->grabar_registro(fp, g, 100); n7 = fp->grabar_registro(fp, h, 100); - + n8 = fp->grabar_registro(fp, i, 100);*/ printf("ID0 = %d\n", n1); printf("ID1 = %d\n", n2); printf("ID2 = %d\n", n3); @@ -88,13 +88,13 @@ int main(int argc, char *argv[]) printf("ID5 = %d\n", n6); printf("ID6 = %d\n", n7); - +ver_archivo_FS(fp); /*fp->borrar_registro(fp, n4, 100); fp->borrar_registro(fp, n2, 100); fp->borrar_registro(fp, n6, 100);*/ - n8 = fp->grabar_registro(fp, i, 100); - printf("Grabe Ok\n"); - fp->leer_registro(fp, n8, b, 100); + fp->borrar_registro(fp, n1, 100); + printf("borre el registro de id = %d\n",n1); + fp->leer_registro(fp, n2, b, 100); printf("Recuperado : %s\n", b); -- 2.43.0