1

我创建了一个managed_shared_memory具有名称和大小的对象。之后,我想再次获得这个名字。我该怎么做呢?我希望会有类似get_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;
}
4

2 回答 2

3

我将 managed_shared_memory 子类化并将名称保存在成员变量中。

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) {
}
于 2013-06-18T13:39:10.820 回答
0

您可以通过managed_shared_memory shm这种方式访问​​您的名称:

shm.named_begin()->name();

(不过我同意,这是违反直觉的,并且很难找到它,因为我正在寻找一个吸气剂。)

编辑

我很难让它在你的样本中工作,这很奇怪,因为我在其他地方使用它并且它似乎工作。可能还有更多的东西。

于 2018-08-02T07:56:24.323 回答