From: Ricardo Markiewicz Date: Mon, 5 Apr 2004 02:18:03 +0000 (+0000) Subject: * Empiezo a probar el codigo de tipo3 X-Git-Tag: svn_import_r684~650 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/8a6f628c163936c6f0852c398694f2d5fc946c37 * Empiezo a probar el codigo de tipo3 --- diff --git a/tipo3/Makefile b/tipo3/Makefile index f19ceb8..6d93bd5 100644 --- a/tipo3/Makefile +++ b/tipo3/Makefile @@ -3,5 +3,5 @@ LDFLAGS= all: main -main: main.c param_cte.c +main: main.c param_cte.c emufs.c diff --git a/tipo3/emufs.c b/tipo3/emufs.c index a19ded7..b559489 100644 --- a/tipo3/emufs.c +++ b/tipo3/emufs.c @@ -1,8 +1,25 @@ #include "emufs.h" +#include "param_cte.h" -EMUFS *emufs_crear(const char *filename, int tipo) +/* Defino las extenciones que usan cada tipo de archivo */ +#define EXT_TIPO3_ID ".id3" +#define EXT_TIPO3_DATA ".dat" +#define EXT_TIPO3_DISP ".fsc" + +char *str_dup(const char *s) +{ + if (s == NULL) return NULL; + char *tmp = (char *)malloc(sizeof(char)*(strlen(s)+1)); + strcpy(tmp, s); + return tmp; +} + + +EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, unsigned int tam_reg) { + char name[255]; + FILE *fp; EMUFS *tmp = (EMUFS *)malloc(sizeof(EMUFS)); switch (tipo) { @@ -11,6 +28,28 @@ EMUFS *emufs_crear(const char *filename, int tipo) case T2: break; case T3: + tmp->tipo = T3; + tmp->tam_bloque = tam_bloque; + tmp->leer_bloque = leer_bloque; + tmp->leer_registro = leer_registro; + tmp->grabar_registro = grabar_registro; + tmp->borrar_registro = NULL; + tmp->nombre = str_dup(filename); + + strcpy(name, filename); + strcat(name, EXT_TIPO3_DATA); + fp = fopen(name, "w"); + if (fp == NULL) { + /* ERROR */ + free(tmp->nombre); + free(tmp); + return NULL; + } + /* Guardo el Header */ + fwrite(&tipo, sizeof(char), 1, fp); + fwrite(&tam_bloque, sizeof(unsigned int), 1, fp); + fwrite(&tam_reg, sizeof(unsigned int), 1, fp); + fclose(fp); break; default: free(tmp); @@ -21,3 +60,11 @@ EMUFS *emufs_crear(const char *filename, int tipo) } +int emufs_destruir(EMUFS *e) +{ + if (e == NULL) return 1; + free(e->nombre); + free(e); + return 0; +} + diff --git a/tipo3/emufs.h b/tipo3/emufs.h index 4314f6d..aeae572 100644 --- a/tipo3/emufs.h +++ b/tipo3/emufs.h @@ -7,16 +7,16 @@ typedef enum {T1, T2, T3} EMUFS_TYPE; typedef struct _emu_fs_t { - EMUFS_TYPE tipo; /* Corregir nombres */ - unsigned long tam_bloque; /* 0 si no tiene bloques */ - int (*leer_bloque)(struct _emu_fs_t *, int, void *); - int (*leer_registro)(struct _emu_fs_t *, int, void *, unsigned long); - int (*grabar_registro)(int , void *, unsigned long ); + EMUFS_TYPE tipo; /* Corregir nombres */ + unsigned long tam_bloque; /* 0 si no tiene bloques */ + int (*leer_bloque)(struct _emu_fs_t *, int, void *); + int (*leer_registro)(struct _emu_fs_t *, int, void *, unsigned long); + int (*grabar_registro)(struct _emu_fs_t *, void *, unsigned long ); int (*borrar_registro)(struct _emu_fs_t *, int); - char *nombre; + char *nombre; } EMUFS; -EMUFS *emufs_crear(const char *filename, int tipo); - +EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, unsigned int tam_reg); +int emufs_destruir(EMUFS *e); #endif diff --git a/tipo3/main.c b/tipo3/main.c index 5359aca..b6e0579 100644 --- a/tipo3/main.c +++ b/tipo3/main.c @@ -1,9 +1,16 @@ #include - +#include +#include "emufs.h" int main() { - printf("TODAVIA NO HAGO NADA, PERO CUANDO HAGA ALGO... AGARRATE!!!\n"); + EMUFS *fp; + char a[] = "1234567890"; + + fp = emufs_crear("articulos", T3, 512, 100); + + fp->grabar_registro(fp, a, strlen(a)+1); + emufs_destruir(fp); return 0; }