私は個人データベースの維持に関する学校のプロジェクトを行っています。しかし、私の講師は実践について説明していませんでした。彼らは、cでコーディングする方法ではなく、理論(データ構造など)について説明しました。
私たちは、彼らが解決したいと思っていた一定量のテーブル、インデックス、およびコンサルトを与えられ、遅れて実行されるデータ構造をプログラムすることになっています。
セカンダリインデックスのデータとb+ツリーを保持するためにハッシュテーブルを選択しました。
さて、b +ツリーはRAMに保持できますが、ハッシュテーブルはハードディスクに保持できる必要があります。そのため、fwrite()関数を使用してディスクに保持しています。しかし、私は問題を見つけました。単一のfwrite命令でバケット全体をディスクに書き込む方法がわかりません(これは、私が与えられた数少ない要件の1つです)。
構造を初期化するために私が持っているコード
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(2つのポインターのcos)ですが、プログラムが既に開始されたらこれらの値を計算する必要があるため、これらの2つのポインターvectors[]を作成できません。そして、私が読んだものでは、ベクトルはメモリ内の場所を変更するため、ベクトルのサイズを変更する方法はありません。
私が考えることができる唯一の解決策は、バケット全体をchar配列(一種のバッファー)にロードしてから、それをメモリーに書き込むことです。
何か案は?