Python mmap 'Permission denied' on Linux

后端 未结 4 1088
梦毁少年i
梦毁少年i 2021-02-18 14:26

I have a really large file I\'m trying to open with mmap and its giving me permission denied. I\'ve tried different flags and modes to the os.open but its just not

相关标签:
4条回答
  • 2021-02-18 14:44

    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 file
    size = f.tell()
    fh = f.fileno()
    
    m = mmap.mmap(f, size, mmap.MAP_PRIVATE, mmap.PROT_READ)
    
    0 讨论(0)
  • The cross-platform call of mmap can be performed using access parameter:

    mfd = os.open('BigFile', os.O_RDONLY)
    mm = mmap.mmap(mfd, 0, access=mmap.ACCESS_READ)
    

    The mmap construction permissions should be synced with the file open permissions (both read, write, or read/write).

    0 讨论(0)
  • 2021-02-18 14:59

    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)
    
    0 讨论(0)
  • 2021-02-18 15:03

    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)
    
    0 讨论(0)
提交回复
热议问题