Python 为什么可以';我不能用已知大小的mmap创建一个新文件吗?

Python 为什么可以';我不能用已知大小的mmap创建一个新文件吗?,python,mmap,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

我正在尝试创建一个内存映射文件,如下所示

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个零。根据
mmap
的python文档:

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

我使用了各种权限,但我认为文件的
'r+b'
和地图的
访问_WRITE
是正确的


这是在beaglebone Linux机器上。顺便说一句,我会使用带有open(…)的
作为f:
模式,但在这种情况下我不能,因为mmap必须在函数返回后保持打开状态。

unix版本的mmap不会自动增加文件,但您可以自己将零写入文件,类似于:

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)

谢谢我重新阅读了文档,意识到我正在阅读Windows部分。下面是另一种将文件写入固定大小的方法,据说速度会快一点: