python mmap flush()不能与ACCESS_COPY一起使用

时间:2014-10-30 22:45:33

标签: python mmap flush

我尝试使用ACCESS_COPY模式映射文件。然后我写了一个char和flush,但flush()返回失败并且更改没有写回文件。有什么想法吗?谢谢。

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

import os, mmap

f = open('etc.test', 'r+b')

mapped = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_COPY)
print mapped[0]
mapped[0] = 'R'
print mapped.flush()  <--- returns 0 (error on Windows)
mapped.close()
f.close()

1 个答案:

答案 0 :(得分:1)

我找到了答案:

确实,这是预期的行为。来自python源代码:

    if (self->access == ACCESS_READ || self->access == ACCESS_COPY)
    return PyLong_FromLong(0);

因此,如果使用ACCESS_COPY,它将返回0。这是正常的,Windows API以这种方式运行,COW仅在内存中使用,并且不会被刷新。

无论如何,你可以用f.write()

写回所有数据