当前位置: 技术问答>linux和unix
请问溢出mmap()分配的共享空间要怎么办??
来源: 互联网 发布时间:2015-08-09
本文导语: 我使用mmap()把文件映射到共享空间,假如写入的大小超出了分配的大小(大小为页的倍数),我该怎么办?? 使用“重新mmap()为文件分配一个空间,把以前分配的空间的内容拷贝过来,释放以前空间”,这样的做法...
我使用mmap()把文件映射到共享空间,假如写入的大小超出了分配的大小(大小为页的倍数),我该怎么办??
使用“重新mmap()为文件分配一个空间,把以前分配的空间的内容拷贝过来,释放以前空间”,这样的做法可以的吗?
使用“重新mmap()为文件分配一个空间,把以前分配的空间的内容拷贝过来,释放以前空间”,这样的做法可以的吗?
|
我以前也碰到这样的问题,是这样解决的:
如果超,如以前文件描述字没关闭,先关闭。调用munmap(),然后重新打开文件,
调用lseek设置要映射文件长度(扩大到需要的长度),写一字节,也就是占位,设定
文件长度。然后重新mmap(),再访问
还有,存储映射的长度不能超过要映射的文件的长度,超过操作将无效,
大部分系统会发信号给进程表示错误。虚拟内存可以
但是虚存是内存不够用硬盘,根存储映射反过来。我那种做法效率会变低,最好的方式是一次
lseek到所需空间,这样效率才高
如果超,如以前文件描述字没关闭,先关闭。调用munmap(),然后重新打开文件,
调用lseek设置要映射文件长度(扩大到需要的长度),写一字节,也就是占位,设定
文件长度。然后重新mmap(),再访问
还有,存储映射的长度不能超过要映射的文件的长度,超过操作将无效,
大部分系统会发信号给进程表示错误。虚拟内存可以
但是虚存是内存不够用硬盘,根存储映射反过来。我那种做法效率会变低,最好的方式是一次
lseek到所需空间,这样效率才高
|
可以啊,效率低了