Skip to main content
 首页 » 编程设计

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

2024年11月01日34小虾米

我正在尝试创建这样的内存映射文件

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 文档:

If length is larger than the current size of the file, the file is extended to contain length bytes

我试过各种权限,但我认为文件的 'r+b' 和 map 的 ACCESS_WRITE 是正确的。

这是在 beaglebone Linux 机器上。顺便说一句,我会使用 with open(...) as 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)