Skip to main content
 首页 » 编程设计

python mmap flush() 不适用于 ACCESS_COPY

2025年05月04日23leader

我正在尝试使用 ACCESS_COPY 模式映射文件。然后我写一个字符并刷新,但是 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() 

请您参考如下方法:

我找到了答案:

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

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

因此,如果使用 ACCESS_COPY,它将返回 0。这很正常,Windows API 就是这样,COW 只在内存中使用,不会被刷新。

无论如何,您可以使用 f.write() 将所有数据写回