Creo que tengo el problema opuesto al descrito here. Tengo un proceso escribiendo datos en un registro, y quiero un segundo proceso para leerlo, pero no quiero que el segundo proceso pueda modificar los contenidos. Este es potencialmente un archivo grande, y necesito acceso aleatorio, entonces estoy usando el módulo mmap de python.Python mmap ctypes - solo lectura
Si creo el mmap como de lectura/escritura (para el segundo proceso), no tengo ningún problema para crear el objeto ctypes como una "vista" del objeto mmap usando from_buffer. Desde una mirada superficial al código c, parece que este es un molde, no una copia, que es lo que quiero. Sin embargo, esto se rompe si hago mmap ACCESS_READ, lanzando una excepción que from_buffer requiere privilegios de escritura.
I think Quiero utilizar el método ctypes from_address() en su lugar, que no parece necesitar acceso de escritura. Probablemente me esté perdiendo algo simple, pero no estoy seguro de cómo obtener la dirección de la ubicación dentro de un mmap. Sé que puedo usar ACCESS_COPY (para que las operaciones de escritura aparezcan en la memoria, pero no se conserven en el disco), pero prefiero mantener las cosas solo de lectura.
¿Alguna sugerencia?
Si está utilizando el módulo python mmap, ¿por qué necesita crear un objeto ctypes? – tMC
El registro no es solo texto, incluye estructuras de datos que he asignado a la clase de estructura Ctypes. Así que voy a mapear la memoria a los diversos tipos de Estructura, y usar eso para acceder a los subelementos y tomar decisiones sobre cómo procesar diferentes partes del registro. –