我想在Linux进程中的特定地址分配一块内存。
实际上我想做一些类似的事情:
我会有进程号。
每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(它将存储进程相关信息)。这将由每个进程完成
一旦分配了该内存,程序就会调用库中的其他函数。现在这些函数想要访问第一个函数分配的内存(包含进程相关信息)。
问题是我无法存储库中进程地址空间中分配的内存的地址(甚至不能存储在静态指针中,因为有多个进程),而且我什至不希望用户程序存储该地址。我只是不想让用户程序知道库在其地址空间中分配了内存。库函数对他们来说是抽象的,他们只能使用它们。
有没有可能克服这个问题。
我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配在相同的地址(比如 10000),而不管其他所有事情。
因此任何想要访问该内存的库函数都可以轻松地通过以下方式完成:char *p=10000;
然后访问,访问的是调用库函数的进程的地址空间。
不是 100% 我得到了你的目标,但如果你想将内存映射到特定的设置地址,你可以使用 MAP_FIXED 标志到 mmap():
“当在 flags 参数中设置 MAP_FIXED 时,会通知实现 pa 的值应准确地为 addr。如果设置了 MAP_FIXED,则 mmap() 可能会返回 MAP_FAILED 并将 errno 设置为 [EINVAL]。如果 MAP_FIXED 请求成功,由 mmap() 建立的映射将替换 [pa,pa+len) 范围内进程页面的任何先前映射。”
请参阅 mmap 手册页:http://linux.die.net/man/3/mmap http://linux.die.net/man/3/mmap
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)