我正在做一个关于维护个人数据库的学校项目。但我的导师没有解释实践,他们解释了理论(数据结构等)而不是如何在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;
是我遇到的问题是,当我尝试写一个桶。 bucket大小只有8(两个指针的cos),但我不能制作这两个指针向量[],因为一旦程序已经启动,我必须计算这些值。而对于我所读的内容,没有办法调整矢量大小,因为它们会改变内存中的位置。
我能想到的唯一解决方案是将整个桶加载到一个char数组(缓冲区类型)中,然后将其写入内存。
任何想法?
我该怎么处理废物? 因为整个想法是将整个页面(在这种情况下为桶)写入磁盘。 – 2010-06-27 02:19:39
我不确定你的意思。我给出的代码示例将写入一个Hist_Clin结构及其包含的所有数据。之前或之后没有数据会被写入,所以它是一个相对干净,无浪费的方法。您可能不得不求助于分页文件或使用某种文件存储功能来访问数据。没有看到更完整的例子,我不确定它将如何完成。 – ssube 2010-06-27 02:38:10
是不是保留了结构? ;) – Nyan 2010-06-27 03:07:01