gpt4 book ai didi

c++ - 如何从 boost::interprocess::managed_shared_memory 对象获取 shmid

转载 作者:行者123 更新时间:2023-11-28 05:43:05 26 4
gpt4 key购买 nike

boost::interprocess 会像这样创建一个 shm:

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "ContainerSharedMemory", 65536);

但是怎么能像这样看这个 shm:

/Tool/SHMCache$ ipcs -m

key shmid owner perms bytes nattch status
0x00005feb 0 root 666 12000 2
0x00005fe7 32769 root 666 524288 2
0x00005fe8 65538 root 666 2097152 2
0x0001c08e 98307 root 777 2072 0

最佳答案

managed_shared_memory 用于跨平台使用,它使用指向不同操作系统上的内部实现的 BasicManagedMemoryImpl 指针。例如,它使用 basic_managed_windows_shared_memory 作为 Windows 的后端。 managed_shared_memory 出于可移植性的考虑,没有获取 shmid 的方法。如果您的操作系统支持系统 V 共享内存,您可以使用 basic_managed_xsi_shared_memory,它具有 get_shmid() 方法和与 basic_managed_shared_memory 几乎相同的接口(interface)。一个简单的例子:

#include <boost/interprocess/xsi_shared_memory.hpp>
#include <boost/interprocess/mapped_region.hpp>

using namespace boost::interprocess;

int main(int argc, char *argv[])
{
//Build XSI key (ftok based)
xsi_key key(argv[0], 1);
//Create a shared memory object.
xsi_shared_memory shm (create_only, key, 1000);
// TODO Remove if exists
printf("shmid: %d\n", shm.get_shmid());
}

然后用ipcs -m可以看到共享内存是否创建成功。

关于c++ - 如何从 boost::interprocess::managed_shared_memory 对象获取 shmid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732617/

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