相关疑难解决方法(0)

使用boost :: interprocess共享地图

我有一个简单的要求可能很难解决.我确实找到了一些像这样或者这样的引线,但我似乎无法自述使用它们.前者甚至没有为我翻译成可构建的代码.我对Boost没有经验只是自己写这个,但在我看来这可能是一个常见的要求.

我也遇到过Interprocess STL Map,但我还没有把它组装成工作代码.

我想boost::interprocess是去的地方,除非我想从头开始创建一些共享内存映射.

我不关心便携性.我需要一个适用于MS编译器的解决方案,特别是VS 2010附带的解决方案.

这张海报似乎想要或多或少地想要做什么,除了我需要将GUID映射到任意长度的二进制缓冲区(但是int到字符串同样好作为起点).不幸的是,即使从实验开始,我也无法干净地编译代码.

此外,我有两个问题:A)是否可以自动(或至少可预测)增加/缩小共享内存以满足分配需求; B)假设一个进程创建映射,另一个进程如何"附加"它?

我不介意解决方案是否需要多个共享"段"以满足分配需求.它不一定必须是单个单片共享内存块.

任何帮助都非常感谢.

c++ boost map shared-memory boost-interprocess

5
推荐指数
1
解决办法
8104
查看次数

将无序映射写入共享内存不起作用

我试图共享一个无序的映射(哈希映射),但它最终在它试图在地图中插入数据的行处的浮点异常结束.

有人可以帮助理解我哪里出错吗?

#include <iostream>
#include <string>
#include <unordered_map>

#include <sys/ipc.h>
#include <sys/shm.h>
int main ()
{
    std::unordered_map<std::string,double> *tmp;

    key_t key = 5678;
    int shmid = shmget(key, 1000, IPC_CREAT | IPC_EXCL | 644);
    if(shmid == -1){
        std::cerr << "Failed to create the shared segment." << std::endl;
        exit(-1);
    }

    void *addr = shmat(shmid, NULL, 0);
    if(addr == (void*)-1){
        std::cerr << "Failed to attach the segment to the process." << std::endl;
        exit(-1);
    }

    tmp = static_cast< std::unordered_map<std::string,double>* >(addr);
    tmp->insert (std::pair<std::string,double>("abc",1.2));

    shmdt(addr);
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ linux

0
推荐指数
1
解决办法
1890
查看次数

标签 统计

c++ ×2

boost ×1

boost-interprocess ×1

linux ×1

map ×1

shared-memory ×1