C++ 如何获取boost::进程间::托管共享内存的名称
我创建了一个具有名称和大小的C++ 如何获取boost::进程间::托管共享内存的名称,c++,get,shared-memory,boost-interprocess,C++,Get,Shared Memory,Boost Interprocess,我创建了一个具有名称和大小的managed\u shared\u memory对象。之后,我想再次得到这个名字。我该怎么做?我希望有一个像get\u name之类的函数,但我找不到 #include <boost/interprocess/managed_shared_memory.hpp> int main() { using namespace boost::interprocess; managed_shared_memory shm(open_or_create
managed\u shared\u memory
对象。之后,我想再次得到这个名字。我该怎么做?我希望有一个像get\u name
之类的函数,但我找不到
#include <boost/interprocess/managed_shared_memory.hpp>
int main()
{
using namespace boost::interprocess;
managed_shared_memory shm(open_or_create,"MySharedMemory", 65536);
// The problem how the get the name out of the
std::string name = shm.get_name(); // does not exist
std::string name = shm.get_device().get_name(); // is not accessible
return 0;
}
#包括
int main()
{
使用名称空间boost::interprocess;
托管共享内存shm(打开或创建“MySharedMemory”,65536);
//问题是如何把名字从
std::string name=shm.get_name();//不存在
std::string name=shm.get_device().get_name();//不可访问
返回0;
}
我将托管共享内存子类化,并将名称保存在成员变量中
class my_shared_memory : public managed_shared_memory {
private:
const char* name;
public:
my_shared_memory(open_or_create_t t, const char *name, size_type size);
const char* get_name() { return name; }
};
my_shared_memory::my_shared_memory(open_or_create_t t, const char* name, size_type size)
: managed_shared_memory(t, name, size)
, name(name) {
}
您可以通过以下方式访问
托管共享内存shm的名称:
shm.named_begin()->name();
(不过我同意,这是违反直觉的,我很难找到它,因为我在寻找一个有成就感的人。)
编辑
我很难使它在你的样品中工作,这是奇怪的,因为我在其他地方使用它,它似乎工作。它可能有更多的含义。它只是一根绳子——没什么特别的;所以你可以像其他人一样保留它。如果您决定使用get_name方法,那么您可以从实现该功能的托管共享内存派生一个类。