2
我想創建一個內存映射文件這樣爲什麼我無法使用已知大小的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個零。據爲mmap
Python文檔:
如果長度大於文件的當前大小,文件擴展爲包含 長度字節
我曾與各種權限玩耍了,但我認爲'r+b'
爲文件,ACCESS_WRITE
爲地圖將是正確的。
這是在一個beaglebone Linux機器上。順便說一句,我會用with open(...) as f:
模式,但我不能在這種情況下,因爲mmap必須在函數返回後保持打開狀態。
謝謝。我重讀了文檔,並意識到我正在閱讀Windows部分。下面是將文件寫入固定大小的另一種方式,這應該是更快一點:http://stackoverflow.com/questions/8816059/create-file-of-particular-size-in-python –
@MarkLakata這是一個很好的技巧,謝謝分享。 –