如何像二进制文件一样读取boost mapped_region对象?

时间:2014-12-16 14:17:13

标签: c++ boost binary

我使用boost库在Tutorial之后将二进制文件映射到内存中,但现在我无法弄清楚如何迭代二进制对象,就像我直接打开它时使用ifstream一样:

这是代码

#include <boost/interprocess/file_mapping.hpp>
#include <boost/interprocess/mapped_region.hpp>

...

file_mapping m_file(SHMFILE.c_str(), read_write);
mapped_region region(m_file, read_write);

我想做那样的事情:

ifstream myfile (region.get_address(), std::ios::in);
struct stat filestatus;
sstemp = filename.str();
const char * c = sstemp.c_str();
stat(c, &filestatus);
size = filestatus.st_size;
int cant = 0;

while (cant < size)
{

    myfile.read((char *) user_id, 4);   
    cant += 4;
}

有办法吗?

1 个答案:

答案 0 :(得分:1)

  

我无法弄清楚如何迭代二进制对象,就像我直接打开它时使用ifstream一样

好吧,如果你想完全像只读二进制文件一样使用它,为什么还要使用别的东西呢?

也许你想做这样的事情:

file_mapping m_file(SHMFILE.c_str(), read_write);
mapped_region region(m_file, read_write);

char const* it = region.data();
char const* e = it + region.size();

for (; (it+4) <= e; it += 4)
{
     auto user_id = *reinterpret_cast<uint32_t const*>(it);
}

然后,对于共享内存,我通常以托管方式使用它(例如使用Boost Interprocess托管内存段管理器)