Я делаю школьный проект по ведению персональной базы данных. но мои преподаватели не объяснили практику, они объяснили теорию (структуры данных и тому подобное), а не как кодировать в c.
Мы получили определенное количество таблиц, индексов и консультаций, которые они хотели решить, и мы должны запрограммировать структуры данных, которые работают позади.
Я выбрал хеш-таблицу для хранения данных и деревьев b + для вторичных индексов.
Ну, b + деревья, я могу хранить их в оперативной памяти, но хеш-таблицу, я должен быть в состоянии сохранить их на жестком диске. Поэтому я использую функцию fwrite (), чтобы сохранить ее на диске. Но я нашел проблему. Я не знаю, как записать все ведро на диск с помощью одной инструкции fwrite (это одно из немногих требований, которое мне было дано).
код, который у меня есть для инициализации структуры
FILE * file;
file = fopen ( "HistoriasClinicas.bin" , "wb" );
for(i=0;i<amountOfBuckets;i++)
fwrite (Bucket , getpagesize() ,1 , file );
fclose (file);
А это мои структуры
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;
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь написать ведро. размер сегмента составляет всего 8 (потому что из двух указателей), но я не могу сделать эти два вектора-указателя [], потому что я должен вычислить эти значения, как только программа уже запущена. И что я читаю, нет способа изменить размеры векторов, потому что они меняются местами в памяти.
Единственное решение, которое я могу придумать, - это загрузить целое ведро в массив символов (вид буфера) и затем записать его в память.
Есть идеи?