From 9e9b90c186ca2d7c0cb5fd777beba28714fbaeff Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Sat, 10 Apr 2004 04:33:05 +0000 Subject: [PATCH] Ejemplo para leer un registro andando. --- emufs/idx.c | 7 ++++--- emufs/tipo1.c | 18 ++++++++---------- emufs/tipo1_test.c | 27 +++++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/emufs/idx.c b/emufs/idx.c index f7c89fd..29e021d 100644 --- a/emufs/idx.c +++ b/emufs/idx.c @@ -38,6 +38,7 @@ #include "idx.h" #include #include +#include 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; itam_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, diff --git a/emufs/tipo1_test.c b/emufs/tipo1_test.c index 8b3e1b9..bb18c19 100644 --- a/emufs/tipo1_test.c +++ b/emufs/tipo1_test.c @@ -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; } -- 2.43.0