kutu
@kutu

Как замаппить буфер только для чтения в ctypes.Structure?

python3.3, win32

есть кусок памяти, доступный для чтения
m = mmap.mmap(0, MEMMAPFILESIZE, MEMMAPFILE, access=mmap.ACCESS_READ)

из него хочется получить объект с полями для чтения из этой памяти напрямую, но не хочется создавать класс с кучей пропертей и ручным чтением по нужным оффсетам

сейчас я сделал так
header_struct = struct.Struct('i')
Header = collections.namedtuple('Header', 'version')
h = Header._make(header_struct.unpack_from(m))
print(h.version)

проблема в том, что значения в памяти динамические, другая программа их меняет, а данный способ лишь копирует память, к тому же не будет работать автодополнение

если делать через Structure
class Header(ctypes.Structure):
    _fields_ = [
        ('version', ctypes.c_int),
    ]
h = Header.from_buffer(m)

это вызывает ошибку, так как буфер должны быть writable

а хочется красиво и просто
  • Вопрос задан
  • 2529 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы