매핑 된 파일 C++에서 나는이 구조체가 /합니다 :쓰기 및 읽기는
struct DataItem
{
std::string tag;
vector<unsigned char> data_block;
time_t input_time;
int version_mark;
};
내가 뭘하려고 오전 부스트 (1.47.0 버전 & Windows 플랫폼)지도 약 10MB의 파일을 생성하는 것입니다 그 파일을 메모리에 저장하고이 구조체 유형의 데이터를 메소드에 작성하십시오. 그것은이 하나입니다
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);
}
}
을 (난 그냥 기능을 시도하고 이후는 구조체의 모든 atrributes를 기입하지 않았다) 그리고 다른 함수에서이 같은 파일에서 데이터를 읽기 위해 노력하고 있어요 : (I 단지 데이터가 파일에 존재하는 경우 파일은 물리적으로 내 하드 드라이브에 생성됩니다
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;
}
) 적어도 볼 수있는 마지막 데이터와 pop_back 그러나 문제는 myVector2 것은 때마다 (내가 시계 창에서 관찰 할 수 비어), 그래서 내가 파일에 데이터를 쓰는 성공 여부를 테스트 할 수 없습니다. 덧붙여서 컴파일러는 마지막 라인 (cout 라인)에서 액세스 위반 오류를 계발합니다
아무도 내가 managed_map_file 개념을 잘못 이해하고 있는지 또는이 코드가 잘못 되었습니까?