我正在做一个关于维护个人数据库的学校项目。但我的导师没有解释实践,他们解释了理论(数据结构等),而不是如何用 c 编码。
我们给定了他们想要解决的一定数量的表、索引和咨询,我们将对后面运行的数据结构进行编程。
我选择了一个哈希表来保存二级索引的数据和 b+树。
好吧,我可以将 b+ 树保存在 RAM 中,但我必须能够将哈希表保存在硬盘中。所以我使用 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(2 个指针的余数),但我不能制作这两个指针向量 [],因为一旦程序已经启动,我必须计算这些值。对于我读到的内容,没有办法调整向量的大小,因为它们在内存中改变了位置。
我能想到的唯一解决方案是将整个存储桶加载到 char 数组(一种缓冲区)中,然后将其写入内存。
有任何想法吗?