]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - doc/draft.txt
66a503dbec4f6c4e326ffda3aa9c7adb5309ea62
[z.facultad/75.06/emufs.git] / doc / draft.txt
1 ! EmuFS
2
3 $Id$
4
5 !! Estructura general del programa
6
7 El proyecto está separado en 4 partes:
8 * una por cada tipo de archivo a manejar.
9 * una por la interfaz.
10
11
12 !! Esquema para los archivos
13
14 Para facilitar el manejo de los archivos desde la interfaz utilizamos
15 orientación a objetos en C, utilizando punteros a funciones.
16
17 La estructura principal básica es así:
18
19  typedef _emu_fs_t {
20      enum { T1, T2, T3 } tipo; /* Corregir nombres */
21      unsigned long tam_bloque; /* 0 si no tiene bloques */
22      int (*leer_bloque)(int ID, void *, unsigned long tam);
23      int (*leer_registro)(int ID, void *, unsigned long tam);
24      int (*grabar_registro)(int ID, void *, unsigned long tam);
25      char *nombre;
26  } EMUFS;
27
28 luego hay 3 funciones generales:
29
30  /* Abre, determina el tipo de archivo y retorna todo bonito */
31  EMUFS *efs_open(const char *archivo);
32
33  /* cierra (libera memoria) */
34  int efs_close(EMUFS *);
35
36  /* Crea un nuevo archivo de un tipo dado */
37  EMUFS *efs_create(const char *nombre, int tipo);
38
39
40 El uso básico es de la siguiente manera:
41
42  EMUFS *fd;
43  fd = efs_open("facturas.dat");
44  fd->leer_registro(5, dato, 5);
45
46 Cosas que resolver :
47 * en los registros variables no se tiene el tamaño a priori, hay que ver
48   si leer_registro lo determina y pide memoria para alocar el dato, o 
49   poner una funcion que retorne el tamaño del registro y el usurio deba
50   consultar para pedir memoria.
51
52 Todos los archivos tienen otras funciones, pero que son internas y no van
53 a estar en la estructura, porque desde la interfaz no deben ser visibles
54 (es decir, deberian ser static en los .c para asegurar esto). 
55
56 Algunas funciones comunes están separadas en módulos que son usados en las
57 implementaciones de cada uno de los archivos.
58