从函数返回 boost::进程间内存映射文件
Returning boost::interprocess memory-mapped file from function?
如何将此代码放入函数中,以便传递文件路径并将文件映射的字节返回到char数组?每当我尝试时,函数完成后我永远无法读取内容?
using boost::interprocess;
using boost;
boost::shared_ptr<char> getBytes(const char* FilePath){
shared_ptr<file_mapping> fm(new file_mapping(FilePath, read_only));
shared_ptr<mapped_region> region(new mapped_region(*fm, read_only));
shared_ptr<char> bytes(static_cast<char*>(region->get_address()));
return bytes;
}
您可能需要以
完全不同的方式实现您的目标!显然,您不想只delete
指向内存映射数组的指针,而使用指向基址的指针初始化的boost::shared_ptr<char>
会这样做。事实上,您可能根本不应该释放该指针。
退出getBytes()
时,您创建的另外两个对象将超出范围,但这些对象实际上附着在共享内存上。您可能想要做的是将file_mapping
和mapped_region
一起放入一个对象中,该对象作为删除器对象放入返回的boost::shared_ptr<char>
中:这样这两个对象的生存时间足以使指向数组保持活动状态。调用删除器函数后,将释放两个对象。以下是大致的样子,尽管我还没有检查这些是否确实是正确的接口:
struct shared_memory_deleter
{
shared_memory_deleter(char const* file)
: d_fm(new file_mapping(file, read_only))
, d_region(new mapped_region(*fm, read_only))
{
}
void operator()(char*) {
this->d_region.reset(0);
this->d_fm.reset(0);
}
shared_ptr<file_mapping> d_fm;
shared_ptr<mapped_region> d_region);
};
boost::shared_ptr<char> getBytes(const char* FilePath){
shared_memory_deleter deleter(FilePath);
shared_ptr<char> bytes(deleter.d_region->get_address(), deleter);
return bytes;
}
我不确定这是否有效,但它至少有机会。做这样的事情可能不是一个好主意。相反,最好将逻辑包装到对象中,根本不使用任何共享指针:
class shared_memory
{
public:
shared_memory(char const* name)
: d_file(name, read_only)
, d_region(d_file, read_only)
{
}
char const* buffer() const { return d_region.get_address(); }
};
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 字符串共享内存映射的向量
- 确保内存映射页位于内存中
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 内存映射文件访问非常慢
- 内存映射C++中的流数据
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 内存映射区域初始数据
- 内存映射 IO 概念详细信息
- 为什么 du -sh 输出错误大小的内存映射文件
- 您可以将C 对象映射到内存映射的外围设备吗?
- 将 Android 内存映射到具有零拷贝的 GraphicBuffer
- 在内存映射时写入内存映射的文件
- 如何使用 Boost 内存映射解析 C++ 中的 CSV?
- Growing Boost.使用单个写入器的进程间内存映射文件
- 调整窗口内存映射文件的大小,而不会使指针失效
- Winapi:是否需要在可执行内存映射的文件上调用FlushInstructionCache
- 与从C++到C#的内存映射文件共享链式结构
- 在 C++ 和 C# 之间共享内存映射文件结构