【发布时间】:2019-12-15 17:27:36
【问题描述】:
我在 android 中有一个文本文件(或 jpg 照片),它本质上是一个修改后的 linux 系统(我有一些使用 NDK 在 android 中编写本机 C 代码的经验)。我只是想找到这个文件/照片开头的物理内存地址。所以得到一个类似的返回值:0x9abcdef0。我的理解是文件/照片存储在物理内存地址空间的某个地方,如果这个假设是错误的,请告诉我。
我研究了诸如 mmap 之类的调用和一些 SO 帖子,但它们并没有真正做我想要的,只是返回地址。我也不需要诸如 open() 之类的函数或与文件描述符相关的东西,而是希望获得较低级别的真实地址。
How to access physical addresses from user space in Linux?
linux kernel - how to get physical address (memory management)?
【问题讨论】:
-
在我看来,整个文件系统都不太可能在 RAM 中访问。这就是拥有大型存储介质与快速非永久性存储的全部意义所在。您需要解决的实际问题是什么?
-
@Bqin1:在这种情况下,您遇到了 XY 问题。实现这一点的方法不是“获取文件的物理内存地址”。理想情况下,您只需在删除 UI 不知道的位置创建指向文件的硬链接,因此当它删除文件时,仍然会保留一个链接。但是,我不确定存储的文件系统照片是否允许硬链接。或者,您可以查看目录,然后对那里创建的所有内容进行备份(尽管会浪费空间)。
-
@R 谢谢,我已经试过备份了,那个方法太浪费空间了。关于硬链接,你是什么意思,你能举个例子说明如何在linux中创建这个硬链接吗?
标签: android c linux memory memory-management