将动态字符串写入Boost中的共享内存 [英] Writing dynamic string to a shared memory in Boost

查看:309
本文介绍了将动态字符串写入Boost中的共享内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用Boost共享内存在两个进程之间共享一个动态字符数组。我使用以下两段代码来做到这一点:



制片人流程:



I want to share a dynamic array of characters between two processes using Boost Shared Memory. I use the following two pieces of code to do that:

Producer Process:

char *data;
unsigned int share_length;
unsigned int offset;
std::string data_to_share(data + offset, data + offset + share_length);

boost::interprocess::managed_shared_memory managed_shm(boost::interprocess::create_only,
                                            "SomeName", 1024*1024);
typedef boost::interprocess::allocator<char, boost::interprocess::managed_shared_memory::segment_manager> CharAllocator;
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> my_string;

managed_shm.construct<my_string>("DataToShare")(data_to_share.c_str(), managed_shm.get_segment_manager());





消费者流程:





Consumer Process:

boost::interprocess::managed_shared_memory managed_shm(boost::interprocess::open_read_only, "SomeName");
typedef boost::interprocess::allocator<char, boost::interprocess::managed_shared_memory::segment_manager> CharAllocator;
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> my_string;

std::pair<my_string *, size_t > data = managed_shm.find<my_string>("DataToShare");

cout << "Data Size=" << data.first->length() << endl;





问题是,当我尝试在消费者流程中打印DataToShare的长度时,这是错误的,那么什么是我的代码中有问题吗?

它是否在Producer Part中,因为我正在做data_to_share.c_str()这是一个std :: string类型而不是my_string类型?



The problem is when I try to print the length of the DataToShare in the Consumer Process it is wrong, so what is the problem in my code?
Is it in the Producer Part since I am doing data_to_share.c_str() which is a std::string type instead of of my_string type?

推荐答案

这篇关于将动态字符串写入Boost中的共享内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆