gpt4 book ai didi

c - 如何以有保证的方式将虚拟地址传递给 shmat() 函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:46 26 4
gpt4 key购买 nike

我通过虚拟地址使用 shmat()。

  • 第一个进程调用一个 shmat,shmaddr 为空,当它获得数据 block 的虚拟地址时,它存储在另一个共享内存位置。

  • 第二个进程使用第一个进程存储在共享内存中的虚拟地址调用 shmat()。

  • 在大多数情况下,第二个进程通常可以附加到同一个虚拟地址,但在一种情况下我不能,shmat 返回 -1,当我使用 gdb 时,我看到该地址是一个错误地址.

    (gdb) x 0x800852000
    0x800852000: Error accessing memory address 0x800852000: Bad address.

所以我的问题是如何保证我第一次获得虚拟地址时进程能看到吗?

最佳答案

在设置虚拟地址的情况下,最好将其强制设置为不太可能正常使用的值。您很可能得到了错误的地址,因为在您有机会附加之前图书馆或其他东西接管了。我们有类似的情况,我们强制我们的地址为 0x0000005000000000(对于 64 位系统):

void *stuff = shmat(shmid, 0x0000005000000000, SHM_RDONLY);

关于c - 如何以有保证的方式将虚拟地址传递给 shmat() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com