I'm doing a school project about maintaining a personal Database. but my tutors didn't explained the practice, they explained the theory(Data structures and such) not how to code in c.
We where given a certain amount of tables, indexes and consults they wanted to solved and we are to program the data structures that run behind.
I chose a hash-table to keep the data and b+trees for the secondary indexes.
Well the b+ trees I can keep them in RAM but the hash table I must be able to maintain it in the hard disk. So I'm using the fwrite() function to keep it in disk. But I found a problem. I don't know how to write the entire bucket into disk with a single fwrite instruction (This is one of the few requirements I was given).
the code I have for initializing the structure
FILE * file;
file = fopen ( "HistoriasClinicas.bin" , "wb" );
for(i=0;i<amountOfBuckets;i++)
fwrite (Bucket , getpagesize() ,1 , file );
fclose (file);
And this are my structures
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;
The problem that I'm experiencing is that when I try to write a bucket. the bucket size is only 8(cos of the 2 pointers) but I can't make those two pointer vectors[] because I have to calculate those values once the program has already started. And for what I read, there isn't a way to resize vectors, because they change place in the memory.
The only solution I can think of is to load the whole bucket into a char array(kind of a buffer) and then write it to memory.
Any ideas?