为什么我不能使用已知大小的mmap创建新文件?

时间:2014-01-15 00:02:09

标签: python mmap

我正在尝试像这样创建一个内存映射文件

size = 83456
self.file = open("/tmp/installer.ipk", "r+b")
self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE)

但我得到以下异常

Traceback (most recent call last):
   ...
  File "./dept_sensor_service.py", line 70, in handle_control
    self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE)
ValueError: mmap length is greater than file size

在运行此文件之前,文件/tmp/installer.ipk不存在。我希望脚本创建一个名为/tmp/installer.ipk的文件,并填充83456个零。根据{{​​1}}的python文档:

  

如果length大于文件的当前大小,则文件将扩展为包含   长度字节

我玩过各种权限,但我认为文件的mmap和地图的'r+b'是正确的。

这是在一个beaglebone Linux机器上。顺便说一下,我会使用ACCESS_WRITE模式,但在这种情况下我不能,因为mmap必须在函数返回后保持打开状态。

1 个答案:

答案 0 :(得分:2)

mmap的unix版本不会自动增长文件,但您可以自己将零写入文件,例如:

size = 83456
self.file = open("/tmp/installer.ipk", "w+b")
self.file.write("\0" * size)
self.file.flush()
self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE)