C++ 在映射文件C+中写入和读取+;

C++ 在映射文件C+中写入和读取+;,c++,boost,ipc,shared-memory,memory-mapped-files,C++,Boost,Ipc,Shared Memory,Memory Mapped Files,我有这个结构: struct DataItem { std::string tag; vector<unsigned char> data_block; time_t input_time; int version_mark; }; struct数据项 { std::字符串标签; 矢量数据块; 时间输入时间; int版本标志; }; 我想做的是用boost(1.47.0版和Windows平台)创建一个10MB的文件,将该文件映射到内存,

我有这个结构:

struct DataItem
{
  std::string tag;        
  vector<unsigned char> data_block;
  time_t input_time;     
  int version_mark; 
};
struct数据项
{
std::字符串标签;
矢量数据块;
时间输入时间;
int版本标志;
};
我想做的是用boost(1.47.0版和Windows平台)创建一个10MB的文件,将该文件映射到内存,并在方法中写入这种结构类型的一些数据。就是这个:(我没有填充结构的所有属性,因为我只是在尝试功能)

void putData()
{
托管映射文件mfile(仅创建“MyMappedFile”,10485760);
typedef分配器MnmapfileAllocator;
typedef向量MyVector;
const mnmapfileallock_inst(mfile.get_segment_manager());
MyVector*MyVector=mfile.construct(“MyVector”)(alloc_inst);
时间t=时间(0);
struct tm*now=localtime(&t);
对于(int j=0;jtm_秒;
myvector->push_back(数据);
}
}
从另一个函数中,我试图像这样从文件中读取数据:(我只是弹出最后一个数据,看看文件中是否有数据)

void getData()
{
数据项数据;
托管映射文件mfile(仅打开“MyMappedFile”);
typedef分配器MnmapfileAllocator;
typedef载体MyVector2;
const mnmapfileallock_inst(mfile.get_segment_manager());
MyVector2*MyVector2=mfile.find(“MyVector2”)。首先;
myvector2->pop_back();

std::cout back().version_mark您正在putData函数中创建名为“MyVector”的向量,但正在getData函数中搜索名为“MyVector2”的向量。 名称必须相同,就像标识符一样

void putData()
{

    managed_mapped_file mfile(create_only,"MyMappedFile", 10485760);

    typedef allocator<int, managed_mapped_file::segment_manager> MnmapfileAllocator;
    typedef vector<DataItem,MnmapfileAllocator> MyVector;

    const MnmapfileAllocator alloc_inst (mfile.get_segment_manager());

    MyVector *myvector = mfile.construct<MyVector>("MyVector")(alloc_inst);

    time_t t = time(0);
    struct tm* now = localtime(&t);


    for (int j=0; j<10; j++)
    {
        DataItem data; 

        data.version_mark = j;
        data.timestamp = now->tm_sec;

        myvector->push_back(data);

    }

}
void getData()
{
    DataItem data;
    managed_mapped_file mfile(open_only,"MyMappedFile");

    typedef allocator<int, managed_mapped_file::segment_manager> MnmapfileAllocator;
    typedef vector<DataItem,MnmapfileAllocator> MyVector2;

    const MnmapfileAllocator alloc_inst (mfile.get_segment_manager());
    MyVector2 *myvector2 = mfile.find<MyVector2>("MyVector2").first;

    myvector2->pop_back();
    std::cout << myvector2->back().version_mark << std::endl;
}