]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
no encuentro el error, el archivo idx en vez de achicarse crece.... fijense si lo...
authorNicolás Dimov <ndimov@gmail.com>
Fri, 9 Apr 2004 23:10:50 +0000 (23:10 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Fri, 9 Apr 2004 23:10:50 +0000 (23:10 +0000)
emufs/emufs.c
emufs/idx.c
emufs/idx.h
emufs/tipo3.c
emufs/tipo3_main.c

index 0c529edc03fd8136812135abb26a02ffb211b21e..a6a774c32dff5cb6aff9661a808a1075b2256ca9 100644 (file)
@@ -245,6 +245,7 @@ int ver_archivo_FS(EMUFS *emu)
        fclose(f_block_free);
 
        /* Imprimo la lista de bloques/registros */
        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");
        {
        strcpy(name_f_block_free,emu->nombre);
        strcat(name_f_block_free,".idx");
        {
index cc882578975632ec29e1fa44bcd10394b9ed6230..56fa4fca3b0bb787b65c2d1eb3ecdb0f088d7f37 100644 (file)
@@ -128,3 +128,54 @@ int emufs_idx_agregar(EMUFS *emu, int num_bloque, int ID_aux)
        return 0;
 }
 
        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(&reg, 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<cant-1; i++) {
+                  /* Calculo donde empieza el proximo elemento a mover */
+                  final = actual+sizeof(EMUFS_IDX); printf("final = %ld actual =  %ld\n", final/sizeof(EMUFS_IDX), actual/sizeof(EMUFS_IDX));
+                  /* Me paro en ese lugar */
+                  fseek(f_idx, final, SEEK_SET);
+                  /* y lo leo */
+                  fread(&buffer, sizeof(EMUFS_IDX), 1, f_idx);
+                  /* Ahora me paro en la nueva posicion de este item */
+                  fseek(f_idx, actual, SEEK_SET);
+                  /* y lo guardo */
+                  fwrite(&buffer, sizeof(EMUFS_IDX), 1, f_idx);
+                  /* Ahora el proximo item va en la posicion siguiente */
+                  actual += sizeof(EMUFS_IDX);printf("actual = %ld\n", actual/sizeof(EMUFS_IDX));
+       }
+       fseek (f_idx,0,SEEK_END);
+       tam = ftell(f_idx);
+       printf("tamanio del archivo de bloques y registros = %d\n", tam/sizeof(EMUFS_IDX) - 1);
+       fclose(f_idx);
+       truncate(name_f_idx, tam - sizeof(EMUFS_IDX));
+       return 0;
+}
index 40555497d24bb4f8632bf9bae89e638f33ffac00..4dfba88acd068c8fa193c1445590c4f624cc3be6 100644 (file)
@@ -39,6 +39,7 @@
 #define _EMUFS_IDX_H
 
 #include <string.h>
 #define _EMUFS_IDX_H
 
 #include <string.h>
+#include <unistd.h>
 #include "emufs.h"
 
 #define EMUFS_IDX_EXT ".idx"
 #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_agregar(EMUFS *, int , int);
 
+int emufs_idx_borrar(EMUFS *emu, int ID);
+
 #endif /* _EMUFS_IDX_H */
 #endif /* _EMUFS_IDX_H */
index 05d8bad2f74bbe9d02088f68ec3937170bc15726..5ba6af242a496f0bf6b278761e31134164b7bb80 100644 (file)
@@ -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_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;
        /*busco el registro que tengo que eliminar*/
        /* GAZER VER */
 /*     if ( (f_block_reg = fopen(name_f_block_reg,"r+")) == NULL ) return -1;
index cdde0772475ce9b5b0741f7360606921a5706ca6..559a3c9a2ba09be8fd1bb03608025ce3696b9257 100644 (file)
@@ -74,12 +74,12 @@ int main(int argc, char *argv[])
        
        n1 = fp->grabar_registro(fp, a, 100);
        n2 = fp->grabar_registro(fp, c, 100);
        
        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);
        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);
        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);
 
        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);*/
        /*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);
 
 
        printf("Recuperado : %s\n", b);