2014-10-30 48 views
1

我試圖用ACCESS_COPY模式映射文件。然後我寫入一個char和flush,但是flush()返回失敗,並且更改不會寫回到文件中。任何想法爲什麼?謝謝。python mmap flush()不適用於ACCESS_COPY

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() 
+0

是否有您使用mmap.ACCESS_COPY什麼特別的原因?記錄mmap.ACCESS_COPY無法將更改寫回文件。 – nos 2014-10-30 22:51:09

+0

是的,我想在內存中進行更改,然後寫回文件。 「分配給ACCESS_COPY內存映射會影響內存,但不會更新基礎文件。」 「flush([offset,size]) 刷新文件的內存中副本到磁盤的更改。」 – notkov 2014-10-30 22:51:40

回答

0

我已經找到了答案:

事實上,那是預期的行爲。從python源代碼:

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

所以,如果使用ACCESS_COPY,它將返回0。這是正常的,Windows API以這種方式運行,COW僅在內存中使用,並且不會被刷新。

無論如何,你可以將所有的數據寫回用f.write()

相關問題