From: Leandro Lucarella Date: Fri, 26 Mar 2004 14:46:34 +0000 (+0000) Subject: Se agrega el draft sobre la estructura del programa. X-Git-Tag: svn_import_r684~682 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/2f744903366e3d3db315e7c7c3d1fcd38d4c45f4?ds=inline Se agrega el draft sobre la estructura del programa. --- diff --git a/doc/draft.txt b/doc/draft.txt new file mode 100644 index 0000000..66a503d --- /dev/null +++ b/doc/draft.txt @@ -0,0 +1,58 @@ +! EmuFS + +$Id$ + +!! Estructura general del programa + +El proyecto está separado en 4 partes: +* una por cada tipo de archivo a manejar. +* una por la interfaz. + + +!! Esquema para los archivos + +Para facilitar el manejo de los archivos desde la interfaz utilizamos +orientación a objetos en C, utilizando punteros a funciones. + +La estructura principal básica es así: + + typedef _emu_fs_t { + enum { T1, T2, T3 } tipo; /* Corregir nombres */ + unsigned long tam_bloque; /* 0 si no tiene bloques */ + int (*leer_bloque)(int ID, void *, unsigned long tam); + int (*leer_registro)(int ID, void *, unsigned long tam); + int (*grabar_registro)(int ID, void *, unsigned long tam); + char *nombre; + } EMUFS; + +luego hay 3 funciones generales: + + /* Abre, determina el tipo de archivo y retorna todo bonito */ + EMUFS *efs_open(const char *archivo); + + /* cierra (libera memoria) */ + int efs_close(EMUFS *); + + /* Crea un nuevo archivo de un tipo dado */ + EMUFS *efs_create(const char *nombre, int tipo); + + +El uso básico es de la siguiente manera: + + EMUFS *fd; + fd = efs_open("facturas.dat"); + fd->leer_registro(5, dato, 5); + +Cosas que resolver : +* en los registros variables no se tiene el tamaño a priori, hay que ver + si leer_registro lo determina y pide memoria para alocar el dato, o + poner una funcion que retorne el tamaño del registro y el usurio deba + consultar para pedir memoria. + +Todos los archivos tienen otras funciones, pero que son internas y no van +a estar en la estructura, porque desde la interfaz no deben ser visibles +(es decir, deberian ser static en los .c para asegurar esto). + +Algunas funciones comunes están separadas en módulos que son usados en las +implementaciones de cada uno de los archivos. +