linux mmap的问题

安林 2013-05-22 11:28:05
可不可以这样呢...比如我要读的一个文件有一个G,然后写入一个新建的文件里,用mmap可以实现吗?
mmap(0,statbuf.st_size,PROT_READ,MAP_SHARED,fdin,0);
这个len参数的大小只能是文件的大小吗?为什么我改得比文件大小小了就报段错误了呢?还有后面的offset参数,要把写文件往后移该怎么做?
在网上看了很多例子,感觉都没讲到这些哎....求大神指导啊...........
...全文
209 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
安林 2013-05-23
  • 打赏
  • 举报
回复
嗯,我在操作mmap函数的时候主要遇到有3个错误,总结如下: 1.报段错误,打开的读写方式和mmap里的参数不一致会报此错 2.bus error,文件为空,或者mmap了一页而你却要去操作第二页 3.新建的写入文件有时会打开异常,那是因为在mmap的时候往文件里写了不应该写入的字符,所以建议更新文件大小的时候不要用write,用ftruncate 反正记住mmap是一页一页映射的,len和offset参数要是页的倍数就行了...
安林 2013-05-23
  • 打赏
  • 举报
回复
引用 6 楼 qq120848369 的回复:
文件是否足够大? 映射范围超出文件大小也是死。
好了,mmap的问题我算是解决了,多谢你给我解答这么多问题,也给你指个错误,嘿嘿....映射范围超出文件大小也是死 这句话是不对的!!映射范围比文件大是不会错的,只要文件不是空的就ok!我测试了的
qq120848369 2013-05-22
  • 打赏
  • 举报
回复
offset必须getpagesize()对齐。
安林 2013-05-22
  • 打赏
  • 举报
回复
自己先顶,坐等高手.......
安林 2013-05-22
  • 打赏
  • 举报
回复
引用 6 楼 qq120848369 的回复:
文件是否足够大? 映射范围超出文件大小也是死。
我映射的len比文件小,为什么映射的还是文件大小的内容呢,我设置的len不管用??比如我文件有512个字节,我的len只设置了10个字节,为什么最后拷贝到内存的还是512个自己呢?
qq120848369 2013-05-22
  • 打赏
  • 举报
回复
文件是否足够大? 映射范围超出文件大小也是死。
安林 2013-05-22
  • 打赏
  • 举报
回复
引用 3 楼 Idle_Cloud 的回复:
你len参数传得小不会段错误的,应该是你操作有问题
len这个参数如果用statbuf.st_size,就是ok的,如果我再随便改成一个数,就报段错误了,其他的操作都是一样的啊..
安林 2013-05-22
  • 打赏
  • 举报
回复
引用 2 楼 qq120848369 的回复:
offset必须getpagesize()对齐。
更getpagesize()对齐了,又报bus error的错...为什么呢?
Carl_CCC 2013-05-22
  • 打赏
  • 举报
回复
你len参数传得小不会段错误的,应该是你操作有问题

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧