我目前正在处理一些代码,使用
我遇到了这样的情况:希望能够以只读方式打开此mmap文件,并且只有读取数据的进程才能打开。但是,当我这样做时,我不确定如何在该情况下获取指针地址。以下是我能够制作的最小示例:
在Python3上运行,会出现以下错误:
Python2给出了这个:
mmap
对象在进程之间共享一些状态。用例是一堆进程可以访问共享mmap支持的只读数据中的一些数据。其中一部分涉及对底层内存表示进行一些算术运算,我像这个问题中一样使用ctypes来获取底层内存地址。我遇到了这样的情况:希望能够以只读方式打开此mmap文件,并且只有读取数据的进程才能打开。但是,当我这样做时,我不确定如何在该情况下获取指针地址。以下是我能够制作的最小示例:
import mmap
import ctypes
filename = "test"
with open(filename, 'rb+') as fd:
buf = mmap.mmap(fd.fileno(), 0)
int_pointer = ctypes.c_int.from_buffer(buf)
with open(filename, 'rb') as fd:
test_mmap_ro = mmap.mmap(
fd.fileno(), 0, access=mmap.ACCESS_READ,
)
int_pointer2 = ctypes.c_int.from_buffer(test_mmap_ro) #fails here
在Python3上运行,会出现以下错误:
TypeError: must be read-write buffer, not mmap.mmap
Python2给出了这个:
TypeError: mmap can't modify a readonly memory map.
考虑到我实际上想使用只读内存映射,我该如何做到这一点?如果必须更改为可写的mmap,则我会更改,但如果有其他方法可以实现这一点,我宁愿不更改,因此任何建议或解决方法都将不胜感激。