Python mmap 'Permission denied' on Linux
I think its a flags issue, try opening as read only:
mfd = os.open('BigFile', os.O_RDONLY)
and mmap.mmap by default tries to map read/write, so just map read only:
mfile = mmap.mmap(mfd, 0, prot=mmap.PROT_READ)
Try setting the file mode to r+
. That worked for me on Linux:
mfd = os.open('BigFile', "r+")
Then this worked for me as normal:
mfile = mmap.mmap(mfd, 0)
In my case this error occurred because I was attempting to open a block device without specifying an explicit size.
FWIW you cannot use os.stat
/ os.fstat
with a block device to obtain the device's size (which is always 0), but you can use file.seek
and file.tell
:
f = file("/dev/loop0", "rb")f.seek(0, 2) # Seek relative to end of filesize = f.tell()fh = f.fileno()m = mmap.mmap(f, size, mmap.MAP_PRIVATE, mmap.PROT_READ)