我有一个非常大的文件,我试图用mmap打开,但它拒绝了我的许可。我尝试过os.open
的不同标志和模式,但对我来说就是不起作用。
我做错了什么?
>>> import os,mmap
>>> mfd = os.open('BigFile', 0)
>>> mfile = mmap.mmap(mfd, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
mmap.error: [Errno 13] Permission denied
>>>
(使用内置的open()
通过python docs示例工作,但它似乎在读写模式下打开了文件的多个句柄。mmap.mmap
方法只需要文件号,因此我不会假设需要创建一个file
对象;因此我尝试使用os.open()
)
发布于 2011-06-09 07:56:54
我认为这是一个标志问题,试着以只读方式打开:
mfd = os.open('BigFile', os.O_RDONLY)
默认情况下,mmap.mmap会尝试映射读/写,所以只映射只读:
mfile = mmap.mmap(mfd, 0, prot=mmap.PROT_READ)
发布于 2013-01-20 06:44:35
尝试将文件模式设置为r+
。这对我在Linux上很有效:
mfd = os.open('BigFile', "r+")
然后,这对我来说是正常的:
mfile = mmap.mmap(mfd, 0)
发布于 2012-02-12 04:36:01
在我的例子中,出现这个错误是因为我试图在没有指定显式大小的情况下打开一个块设备。
FWIW您不能对块设备使用os.stat
/ os.fstat
来获取设备的大小(始终为0),但您可以使用file.seek
和file.tell
f = file("/dev/loop0", "rb")
f.seek(0, 2) # Seek relative to end of file
size = f.tell()
fh = f.fileno()
m = mmap.mmap(f, size, mmap.MAP_PRIVATE, mmap.PROT_READ)
https://stackoverflow.com/questions/6286592
复制相似问题