4 /** Crea un nuevo nodo y lo inicializa */
5 NODO_B_PLUS emufs_b_plus_crearnodo(INDICE *idx, int es_hoja) {
8 int nonheader_bytes = 0;
12 nodo.es_hoja = es_hoja;
16 /* Calculamos lo que ocupan las cadenas de bytes claves + hijos */
17 nonheader_bytes = idx->tam_bloque - sizeof(int)*3;
18 size_claves = (nonheader_bytes - sizeof(int))/2;
19 size_hijos = size_claves + sizeof(int);
20 nodo.claves = (int*) malloc(size_claves);
21 nodo.hijos = (int*) malloc(size_hijos);
22 memset(nodo.claves,'1',size_claves);
23 memset(nodo.hijos,'9',size_hijos);
28 /** Crea el archivo indice B+ */
29 int emufs_b_plus_crear(INDICE *idx) {
33 int size_claves = (idx->tam_bloque - SIZE_B_PLUS_HEADER - sizeof(int))/2;
34 int size_hijos = size_claves + sizeof(int);
36 /* Creamos el archivo que contendra el indice */
37 fp = fopen(idx->filename, "w");
38 PERR("Creando indice");
39 fprintf(stderr, "Archivo = (%s)\n", idx->filename);
41 PERR("Error al crear el archivo");
45 /* Creamos el nodo raiz y lo guardamos el en indice */
46 raiz = emufs_b_plus_crearnodo(idx,0);
47 fwrite(&raiz,SIZE_B_PLUS_HEADER,1,fp);
48 fwrite(raiz.claves,size_claves,1,fp);
49 fwrite(raiz.hijos,size_hijos,1,fp);
52 /* Liberamos areas de memoria reservadas para claves e hijos */