免费注册 查看新帖 |

Chinaunix

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

[算法] 复杂数据的文件读写问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-09 14:42 |只看该作者 |倒序浏览
typedef struct nodec
{
        char *buf;
        long size;
        struct nodec *next;
        struct nodec *prev;
}nodec,*pnodec;


typedef struct nodeb
{
        struct nodec *pc[100];
        char   buf[100];
        struct nodeb *next;
        struct nodeb *prev;
}nodeb,*pnodeb;

typedef struct nodea
{
        struct nodeb *pb[100];
        struct nodec *pc;
        char   *buf;
        long   size;
}nodea,*pnodea;

今有pnodea mynode;
该如何将此数据写入文件啊?
要写入的包括
mynode->pb;//一个指针数组
mynode->pc;//一个双向链表
mynode->buf;//一个字符串
mynode->size;//数
将链表写入文件不复杂,复杂的是链表中的节点中还嵌套各样的链表。
我想写一个通用的文件接口,可以写入任何类型的数据文件


这个问题的缘由是
typedef struct tpinfo
{
        char *type;
        int flag;
        int len;
        void *(*patch)(void*pdata);
        void *(*depatch)(void*pdata);
}tpinfo,*ptpinfo;
#define make(type,flag,len,patch,depatch)\
                _make(#type,flag,len,patch,depatch)
               
void *_make(char*type,int flag,int len,void *patch,void*depatch)
{
        ptpinfo mytype=new(mytype);
        mytype->flag=flag;
        mytype->len=len;
        mytype->patch=(void*(*)(void*))patch;
        mytype->depatch=(void*(*)(void*))depatch;
        mytype->type=malloc(len+1);
        strcpy(mytype->type,type);
        return (void*)mytype;
}

void write(void *pdata,void *reserved);
void *nodea_patch(void *pdata); //将pdata打包
void *nodea_depatch(void *pdata);//将pdata解包
struct nodea *mydata;

write(mydata,make(nodea,true,sizeof(nodea),nodea_patch,nodea_depatch));  
我想通过这种方式实现write的通用性,不过如何写一个通用的patch函数呢?
请大家注意了,我想实现的是write的通用性,而不是简单的fwrite

[ 本帖最后由 jmy2446267 于 2008-10-9 16:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-09 14:47 |只看该作者
不太明白你的意思。。。。。
mmap()或者用malloc申请内存,写数据,然后写入文件。。。。

论坛徽章:
0
3 [报告]
发表于 2008-10-09 14:49 |只看该作者
以二进制方式读写文件

论坛徽章:
0
4 [报告]
发表于 2008-10-09 14:54 |只看该作者
原帖由 gothicane 于 2008-10-9 14:49 发表
以二进制方式读写文件

linux不区分二进制方式的。。。。

论坛徽章:
0
5 [报告]
发表于 2008-10-09 15:04 |只看该作者
我看上去 这结构似乎是个平面   100*100的  
nodec 是一个标准单位元
nodeb 是一条线的头
nodea 相当于这个平面的一个顶角 同时也具有nodec属性   

写如文件里应该就是正方体数据块.........................

论坛徽章:
0
6 [报告]
发表于 2008-10-09 15:36 |只看该作者
原帖由 alexhappy 于 2008-10-9 14:54 发表

linux不区分二进制方式的。。。。


man fread/fwrite
btw,这种把结构写入文件用fread/fwrite最适合了

论坛徽章:
0
7 [报告]
发表于 2008-10-09 16:05 |只看该作者
原帖由 lemoncookie 于 2008-10-9 15:36 发表


man fread/fwrite
btw,这种把结构写入文件用fread/fwrite最适合了


把结构用fread/fwrite读取/写入文件是不推荐的,因为不同的机器架构是不可移植的

论坛徽章:
0
8 [报告]
发表于 2008-10-09 16:09 |只看该作者
fread/fwrite如果不推荐的话,那就不好办了

论坛徽章:
0
9 [报告]
发表于 2008-10-09 16:20 |只看该作者
虽然不推荐,但还是可以使用的嘛,只要你不把这种机器上写的文件拿到那种机器上去读取就OK

论坛徽章:
0
10 [报告]
发表于 2008-10-09 18:50 |只看该作者
原帖由 雨过白鹭洲 于 2008-10-9 16:05 发表


把结构用fread/fwrite读取/写入文件是不推荐的,因为不同的机器架构是不可移植的

这个说法有根据吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP