python - 如何在 Python 中获取 mmap-ed 内存的地址?

标签 python cpython hardware-interface

我不知道如何在 Python 中获取标准 mmap 对象的虚拟地址(从 mmap 模块)。 记录的方法似乎只能以字节数组或字符串的形式访问内存。

但我需要一次精确访问 2 或 4 个字节的 mmap 内存 - 因为我的应用程序中的内存映射到硬件寄存器(想想/dev/mem 或 GPIO 等)。使用 ctypes 模块可以以这种方式访问​​内存 - 但为此我需要映射的指针 - 或虚拟地址。

目前,我通过使用 libc 中的原生 open() 和 mmap() 函数(感谢相同的 ctypes)克服了这个问题,但我宁愿不这样做。

为什么 mmap 模块不提供简单的方法来获取内存地址?希望我遗漏了一些明显的东西......

-- dd

最佳答案

mmap 对象支持可写缓冲区接口(interface),因此您可以使用 ctypes 类具有的 from_buffer 类方法和 mmap 对象作为参数获取共享 mmap 文件内存的 ctypes 对象。

buf = mmap.mmap(fd, mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_WRITE)
int_pointer = ctypes.c_int.from_buffer(buf)

关于python - 如何在 Python 中获取 mmap-ed 内存的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364876/

相关文章:

python - 如何在有 : NoSuchElement Exception? 的情况下通过链接文本查找元素

python - 来自 python 字符串的 C 字符数组

python - 这是cpython中的循环定义吗?

c - 从并行端口读取 4 µs 长 +5V TTL——何时使用内核中断

.NET 兼容的二维码扫描设备

python - Opencv VideoCapture速度较慢,人们无法检测

python - 数据与素数成正比的素数筛的空间复杂度是多少?

python - 是否可以将训练数据加载器(和数据集)拆分为训练和验证数据集?

python - 获取 C-Python 中的类方法列表

第四 - 如何实现字访问硬件寄存器中的位域?