免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7606 | 回复: 21
打印 上一主题 下一主题

包含多个结构体的 结构体 怎样保存到磁盘中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-12 14:23 |只看该作者 |倒序浏览
#include <stdio.h>

typedef struct data
{
&nbsp;&nbsp;&nbsp;&nbsp;size_t uid;
&nbsp;&nbsp;&nbsp;&nbsp;size_t pos;
} Employee;

struct record
{
&nbsp;&nbsp;&nbsp;&nbsp;char key[128];
&nbsp;&nbsp;&nbsp;&nbsp;Employee *emps;
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hash;
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int total;
};

struct db
{
&nbsp;&nbsp;&nbsp;&nbsp;struct record *recs;
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int records_count;
};


int main(int argc, char *argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;struct db *mdb;
&nbsp;&nbsp;&nbsp;&nbsp;struct record *recs;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;if ((mdb = malloc(sizeof(struct db))) == NULL) return NULL;
&nbsp;&nbsp;&nbsp;if ((mdb->recs = (struct record *)calloc(1000, sizeof(struct record))) == NULL)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(mdb);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;recs = mdb->recs;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;recs[0].emps = (Employee *)calloc(200, sizeof(Employee));

&nbsp;&nbsp;&nbsp;&nbsp;free(recs[0].emps);
&nbsp;&nbsp;&nbsp;&nbsp;free(mdb->recs);
&nbsp;&nbsp;&nbsp;&nbsp;free(mdb);

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}



请问这样的结构体怎么保存到磁盘中。尽量不要用mmap来保存

论坛徽章:
0
2 [报告]
发表于 2008-04-12 14:25 |只看该作者
推荐yaml

论坛徽章:
0
3 [报告]
发表于 2008-04-12 14:41 |只看该作者
先顺序化,然后fwrite,如果结构中没有指针,直接fwrite也行。

论坛徽章:
0
4 [报告]
发表于 2008-04-13 11:03 |只看该作者
顶楼上

论坛徽章:
0
5 [报告]
发表于 2008-04-29 13:46 |只看该作者
请问怎么顺序化?
struct record 这个结构体的 Employee *emps 的个数是动态的。
我不知道怎样保存动态的

论坛徽章:
0
6 [报告]
发表于 2008-04-29 14:00 |只看该作者
包装一下,前面添加一个字段指示emps的个数。

论坛徽章:
0
7 [报告]
发表于 2008-04-29 14:34 |只看该作者
这种东西还是用xml或者数据库比较好。

论坛徽章:
0
8 [报告]
发表于 2008-04-29 14:46 |只看该作者
我这个结构比较简单,用数据库比较浪费。
Employee *emps; 是动态的个数。 不能Employee emps[100]; 这样指定这个结构体的大小。

论坛徽章:
0
9 [报告]
发表于 2008-04-29 16:38 |只看该作者
在这个帖子里,iunknown 大哥説用相对位置。 但是我不是很明白。请大哥指导一下
http://bbs.chinaunix.net/thread-1054566-1-1.html

论坛徽章:
0
10 [报告]
发表于 2008-04-29 16:44 |只看该作者
原帖由 okmmno1 于 2008-4-28 22:00 发表
包装一下,前面添加一个字段指示emps的个数。


我也觉得这样就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP