Pregunta

Estoy haciendo un proyecto escolar sobre el mantenimiento de una base de datos personal. pero mis profesores no explican la práctica, explicaron la teoría (Estructuras de datos y tal) no la forma de código en c.

donde dieron una cierta cantidad de tablas, índices y consultas que querían resolver y que consisten en programar las estructuras de datos que se ejecutan detrás.

Me eligió una tabla hash para mantener los datos y árboles B para los índices secundarios.


Bien los árboles B + I puede guardarlos en la memoria RAM, pero la tabla hash debo ser capaz de mantenerlo en el disco duro. Así que estoy usando la función fwrite () para guardarlo en el disco. Pero me encontré con un problema. No sé cómo escribir todo el cubo en el disco con una sola instrucción fwrite (Este es uno de los pocos requisitos que me dieron).


el código que tengo para inicializar la estructura

FILE * file;
file = fopen ( "HistoriasClinicas.bin" , "wb" );
for(i=0;i<amountOfBuckets;i++)
    fwrite (Bucket , getpagesize() ,1 , file );
fclose (file);

Y esto son mis estructuras

typedef struct Hist_clin_s{
struct
{
    char codPaciente[7];
} X;
struct
{
    char codMedico[7];
    int fecha;
    char Observacion[151];
} Y;
int ptro;
}Hist_Clin;



typedef struct balde_s{
Hist_Clin *hcs;
char *waste; //Waste to make the bucket reach the page size.
}Bucket;

El problema que estoy experimentando es que cuando trato de escribir un cubo. el tamaño del cubo es sólo 8 (cos de los 2 punteros), pero no puedo hacer que esos dos vectores puntero [] porque tengo que calcular esos valores una vez que el programa ya ha comenzado. Y por lo que he leído, no hay una manera de cambiar el tamaño de los vectores, ya que cambian su lugar en la memoria.

La única solución que se me ocurre es cargar el cubo entero en una matriz de caracteres (una especie de memoria intermedia) y luego escribir en la memoria.

¿Alguna idea?

¿Fue útil?

Solución

Lo que está haciendo generalmente se llama serialización, si eso ayuda a que Google más información.

Ahora, en este caso, la primera estructura:

typedef struct balde_s{
    Hist_Clin *hcs;
    char *waste; //Waste to make the bucket reach the page size.
}Bucket;

Se compone de 2 punteros. Los punteros no necesariamente serán válidos durante un ciclo de ahorro de carga (por lo general puede contar con ellos para no ser), por lo que no es necesario para salvar a aquellos. En su lugar, tendrá que escribir el contenido de esas dos estructuras en el archivo. Por suerte, casi se ha hecho esto fácil para usted mismo. Conoce la dirección (desde el puntero), por lo que sólo tiene que utilizar:

fwrite( (void*)something.hcs, sizeof(Hist_Clin), 1, file);

que escribir n bytes (el tamaño de un registro), a partir del puntero, dados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top