【问题标题】:Increasing a file's size using mmap使用 mmap 增加文件的大小
【发布时间】:2013-06-30 18:03:40
【问题描述】:

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

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

现在big.file 是(大约)1 GB。但是,在 Linux 上,这将返回 ValueError: mmap length is greater than file size

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

【问题讨论】:

  • 我知道已经有一段时间了,但是您尝试过 mmap 的 resize 方法吗?

标签: python linux mmap memory-mapped-files


【解决方案1】:

至少在 POSIX 系统上,mmap() 不能用于增加(或减少)文件的大小。 mmap() 的功能是内存映射文件的一部分。您请求映射的东西应该实际存在是合乎逻辑的!坦率地说,我真的很惊讶你居然能够在 MS Windows 下做到这一点。

如果您想扩大文件,只需在 mmap() 之前 ftruncate() 它。

【讨论】:

  • 哦,这很有用,因为您也可以缩短文件。现在我希望 Windows 有ftruncate()
  • Windows 没有ftruncate()?好吧,这也让我感到惊讶 :-) 但它肯定有一些等效的方法来扩大或缩小文件。
  • 我应该说我是基于 Python 文档的声明,而不是任何 Windows 文档。
  • 对于将来阅读的任何人,文件对象也有一个 truncate() 方法,它的工作方式类似于 os.ftruncte() 接受它在 Windows 和 Unix 上都可用。这很有用,因为 Pypy 具有类似 Unix 的行为来增长内存映射文件,即使在 Windows 上也是如此。
  • 有没有办法对文件进行内存映射,然后增长文件,然后重新映射文​​件?我想知道数据库是否使用内存映射并且也能够增长底层文件。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多