]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Ejemplo para leer un registro andando.
authorLeandro Lucarella <llucax@gmail.com>
Sat, 10 Apr 2004 04:33:05 +0000 (04:33 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 10 Apr 2004 04:33:05 +0000 (04:33 +0000)
emufs/idx.c
emufs/tipo1.c
emufs/tipo1_test.c

index f7c89fd2498c6fab5dceeff653274c91196368dd..29e021db8664c7f9c0864caf4a68828560bbd502 100644 (file)
@@ -38,6 +38,7 @@
 #include "idx.h"
 #include <stdlib.h>
 #include <strings.h>
+#include <unistd.h>
 
 FILE* emufs_idx_abrir(EMUFS* efs, const char* mode)
 {
@@ -153,11 +154,11 @@ int emufs_idx_borrar(EMUFS *emu, EMUFS_REG_ID ID)
        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));
+       printf("tamanio del archivo de bloques y registros = %ld\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);
+       printf("cant = %ld\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));
@@ -174,7 +175,7 @@ int emufs_idx_borrar(EMUFS *emu, EMUFS_REG_ID ID)
        }
        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);
+       printf("tamanio del archivo de bloques y registros = %ld\n", tam/sizeof(EMUFS_IDX) - 1);
        fclose(f_idx);
        truncate(name_f_idx, tam - sizeof(EMUFS_IDX));
        return 0;
index ee444cec3f773f3c6f7a8284c41ad55b98823516..5f0a9eddbec40f41aaddfb198c30c2c1ac0b7d47 100644 (file)
@@ -60,9 +60,10 @@ int emufs_tipo1_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id, void* reg_ptr,
 {
        char* block; /* bloque leido (en donde está el registro a leer) */
        EMUFS_BLOCK_ID block_id; /* id del bloque en donde esta el registro a leer */
-       EMUFS_BLOCK_SIZE offset; /* offset del bloque leido */
-       EMUFS_REG_SIZE curr_reg_size; /* tamaño del registro leido secuencialmente */
-       EMUFS_REG_ID curr_reg_id; /* id del registro leido secuencialmente */
+       EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
+       EMUFS_BLOCK_SIZE block_size; /* tamaño del bloque leído */
+       EMUFS_REG_SIZE curr_reg_size; /* tamaño del registro leído secuencialmente */
+       EMUFS_REG_ID curr_reg_id; /* id del registro leído secuencialmente */
 
        block_id = emufs_idx_buscar_registro(efs, reg_id);
        block = (char*) malloc(efs->tam_bloque);
@@ -95,7 +96,7 @@ int emufs_tipo1_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id, void* reg_ptr,
                }
                /* Desplazo el offset */
                offset += curr_reg_size;
-       } while (offset < efs->tam_bloque);
+       } while (offset < block_size);
 
        free(block);
        return 0;
@@ -105,6 +106,7 @@ int emufs_tipo1_leer_bloque(EMUFS* efs, EMUFS_BLOCK_ID block_id, void *block)
 {
        FILE* file;
        char name_f[255];
+       long cant;
        
        strcpy(name_f,efs->nombre);
        strcat(name_f,".dat");
@@ -118,13 +120,9 @@ int emufs_tipo1_leer_bloque(EMUFS* efs, EMUFS_BLOCK_ID block_id, void *block)
                        SEEK_SET);
        /* FIXME: verificar que no se pase de fin de archivo*/
        fseek(file, block_id * efs->tam_bloque, SEEK_CUR);
-       if (fread(block, efs->tam_bloque, 1, file) != 1) {
-               fclose(file);
-               return -1;
-       }
-
+       cant = fread(block, sizeof(char), efs->tam_bloque, file);
        fclose(file);
-       return 0;
+       return cant;
 }
 
 EMUFS_REG_ID emufs_tipo1_grabar_registro(EMUFS* emu, void* ptr,
index 8b3e1b9749186d222e54b5ca00665f86048633bc..bb18c19e8b3c9385c0562f4ed95bb604fc09a17a 100644 (file)
@@ -8,23 +8,46 @@ int main(int argc, char* argv[]) {
                printf("Faltan argumentos! %s [nombre]\n", argv[0]);
                return 1;
        }
-       efs = emufs_abrir(argv[1]);
+
+       /*
+       efs = emufs_crear(argv[1], T1, 1024, 0);
        if (!efs) {
                printf("No se pudo crear el EMUFS.\n");
                return 1;
        }
-       if (efs->leer_registro(efs, 1, registro1, 4) == -1) {
+       if (emufs_idx_agregar(efs, 0, 0)) {
+               printf("No se pudo agregar índice.\n");
+               return 1;
+       }
+       if (emufs_idx_agregar(efs, 0, 1)) {
+               printf("No se pudo agregar índice.\n");
+               return 1;
+       }
+       return 0;
+       */
+
+       efs = emufs_abrir(argv[1]);
+       if (!efs) {
+               printf("No se pudo abrir el EMUFS.\n");
+               return 1;
+       }
+
+       if (efs->leer_registro(efs, 0, registro1, 4) == -1) {
                printf("No se pudo leer el registro 1.\n");
                return ;
        }
        registro1[4] = '\0';
        printf("Registro 1: %s\n", registro1);
+
+       /*
        if (efs->leer_registro(efs, 1, registro2, 5) == -1) {
                printf("No se pudo leer el registro 2.\n");
                return 1;
        }
        registro2[5] = '\0';
        printf("Registro 2: %s\n", registro2);
+       */
+
        emufs_destruir(efs);
        return 0;
 }