]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - doc/draft.txt
Apunte de Saubidet (?) sobre external sort (bastante flojo).
[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                  tEstadisticas (*obtener_estadisticas)(void); /* Estadisticas. Definir estructura!! */
26                  void (*compactar)(); /* Reorganiza los registros a fin de optimizarlo */
27                  char *nombre;
28  } EMUFS;
29
30 Estos punteros a funciones son los que requiere la interfaz visual para operar
31 con los tipos de archivos. Cada tipo de archivo deberá escribir tantas
32 funciones como crea necesario para poder brindar su completa funcionalidad.
33
34 luego hay 3 funciones generales:
35
36  /* Abre, determina el tipo de archivo y retorna todo bonito */
37  EMUFS *emufs_open(const char *archivo);
38
39  /* cierra (libera memoria) */
40  int emufs_close(EMUFS *);
41
42  /* Crea un nuevo archivo de un tipo dado */
43  EMUFS *emufs_create(const char *nombre, int tipo);
44
45
46 El uso básico es de la siguiente manera:
47
48  EMUFS *fd;
49  fd = emufs_open("facturas.dat");
50  fd->leer_registro(5, dato, 5);
51
52 Cosas que resolver :
53 * en los registros variables no se tiene el tamaño a priori, hay que ver
54   si leer_registro lo determina y pide memoria para alocar el dato, o 
55   poner una funcion que retorne el tamaño del registro y el usurio deba
56   consultar para pedir memoria.
57
58 Todos los archivos tienen otras funciones, pero que son internas y no van
59 a estar en la estructura, porque desde la interfaz no deben ser visibles
60 (es decir, deberian ser static en los .c para asegurar esto). 
61
62 Algunas funciones comunes están separadas en módulos que son usados en las
63 implementaciones de cada uno de los archivos.
64