python mmap flush() не работает с копией ACCESS


Я пытаюсь сопоставить файл в режиме ACCESS_COPY. Затем я пишу один символ и 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 2

1 ответ:

Я нашел ответ:

Действительно, это предполагаемое поведение. Из исходного кода python:

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

Таким образом, он вернет 0 при использовании ACCESS_COPY. Это нормально, Windows API ведет себя таким образом, корова используется только в памяти, и не будет сброшена обратно.

В любом случае, вы можете записать все данные обратно с помощью f. write ()