Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取boost::进程间::托管共享内存的名称_C++_Get_Shared Memory_Boost Interprocess - Fatal编程技术网

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方法,那么您可以从实现该功能的托管共享内存派生一个类。