使用mmap增加文件大小

che*_*cks 5 python linux mmap memory-mapped-files

在Windows上的Python中,我可以创建一个大文件

    from mmap import mmap
    f = open('big.file', 'w')
    f.close()
    f = open('big.file', 'r+')
    m = mmap(f.fileno(), 10**9)
Run Code Online (Sandbox Code Playgroud)

现在big.file是(约)1千兆字节.但是,在Linux上,这将返回ValueError: mmap length is greater than file size.

有没有办法在Linux上获得与Windows相同的行为?也就是说,能够使用mmap?来增加文件的大小?

Cel*_*ada 6

至少在 POSIX 系统上,mmap()不能用于增加(或减少)文件的大小。mmap()的功能是内存映射文件的一部分。从逻辑上讲,您请求映射的东西应该确实存在!坦率地说,我真的很惊讶您实际上能够在 MS Windows 下执行此操作。

如果你想增长一个文件,就把ftruncate()它放在你之前mmap()

  • 对于将来阅读的人来说,文件对象还有一个“truncate()”方法,其工作方式类似于“os.ftruncte()”,接受它在 Windows 和 Unix 上都可用。这很有用,因为 Pypy 具有类似 Unix 的行为来生成内存映射文件,即使在 Windows 上也是如此。 (4认同)