我觉得我有与here描述的相反的问题。我有一个进程将数据写入日志,我希望第二个进程读取它,但我不希望第二个进程能够修改内容。这可能是一个大文件,我需要随机访问,所以我使用python的mmap模块。Python mmap ctypes - 只读
如果我将mmap创建为读/写(对于第二个进程),那么使用from_buffer创建ctypes对象作为mmap对象的“视图”是没有问题的。粗略看一下c代码,看起来这是一个演员,而不是副本,这正是我想要的。但是,如果我使用mmap ACCESS_READ,则抛出一个from_buffer需要写入权限的异常。
我认为我想用ctypes的FROM_ADDRESS()方法来代替,这似乎并不需要写访问。我可能错过了一些简单的东西,但我不确定如何获取mmap中位置的地址。我知道我可以使用ACCESS_COPY(所以写入操作在内存中显示,但不保存到磁盘),但我宁愿保持只读。
有什么建议吗?
如果您使用python mmap模块,为什么需要创建ctypes对象? – tMC 2011-06-09 14:44:55
日志不仅仅是文本,它包括我已经映射到ctypes Structure类的数据结构。所以我会将内存映射到各种结构类型,并使用它来访问子元素并决定如何处理日志的不同部分。 – 2011-06-09 14:59:55