日期:2014-05-16  浏览次数:20640 次

Linux下mmap函数的问题
用mmap映射读取文件的问题我已经解决了.
现在的问题是,   如何用mmap映射一个文件,   然后修改该文件,   可能会添加内容,   也可能会删减内容,   最后将修改保存到文件中去.
50分

------解决方案--------------------
这样谢谢看
if( (fp = open( "./data.bin ",O_RDONLY) ) < 0 )
{
cout < < " Can not open ! " < <endl;
exit(0);
}
if( (fstat(fp,&stat_data) ) < 0 )
{
cout < < " fstat error ! ";
exit(0);
}
if( ( start_fp = mmap(NULL,stat_data.st_size,
PROT_READ,MAP_SHARED,fd_denseindex,0 )) == (void *)-1)
{
cout < < " mmap error ! " < <endl;
exit(0);
}
------解决方案--------------------
mmap没法增加文件长度.
------解决方案--------------------
不能,mmap只是把文件在内存空间内做一个映象,在做这个映象时,文件大小是固定的,所以做成的内存映象
大小也是固定的.
要想改变文件到小,只能先解除映象,再改变文件大小,再建立映象.
是有点麻烦.我在看mmap的源代码时书上写的.还没看完.具体为什么也还没弄懂.
===============================================
不用看源代码,mmap是把文件的一部分复制到内存中,通过修改内存来修改文件。内存与文件是对应的,你mmap分配了内存之后,只能改变内容,不能再改变内存的大小.