12

我们打开一个由另一个进程创建的 boost 共享内存,像这样

  boost::interprocess::managed_shared_memory segment(boost::interprocess::open_only, "SharedMem");

但是如果创建共享内存的进程是root用户,那么读取它的进程,如果是普通用户,将会失败,原因如下:

terminate called after throwing an instance of 'boost::interprocess::interprocess_exception'
what():  Permission denied

我应该怎么做才能避免这种情况?那就是将共享内存的权限授予所有人?

4

2 回答 2

7

如果您查看shared_memory 构造函数,它需要一个权限对象。boost::interprocess::permissions::set_unrestricted可能是您正在寻找的

void set_unrestricted();
//Sets permissions to unrestricted access:
//        A null DACL for windows or 0666 for UNIX.

据此,是在1.45版本中添加的

于 2012-01-06T14:01:40.327 回答
0

下面是一个示例代码片段,用于在创建期间授予对共享内存的无限制权限

boost::interprocess::permissions  unrestricted_permissions;
unrestricted_permissions.set_unrestricted();

shared_mem = new managed_shared_memory(open_or_create, name.c_str(), size, 0, unrestricted_permissions);

于 2022-02-09T02:22:41.107 回答