#include #include #include #include #include #include #include using namespace boost::interprocess; typedef list > MyList; int main () { const char *FileName = "file_mapping"; const std::size_t FileSize = 1000; std::remove(FileName); managed_mapped_file mfile_memory(create_only, FileName, FileSize); MyList * mylist = mfile_memory.construct("MyList") (mfile_memory.get_segment_manager()); //Obtain handle, that identifies the list in the buffer managed_mapped_file::handle_t list_handle = mfile_memory.get_handle_from_address(mylist); //Fill list until there is no more room in the file try{ while(1) { mylist->insert(mylist->begin(), 0); } } catch(const bad_alloc &){ //mapped file is full } //Let's obtain the size of the list std::size_t old_size = mylist->size(); //To make the list bigger, let's increase the mapped file //in FileSize bytes more. // mfile_memory.grow(FileSize); //If mapping address has changed, the old pointer is invalid, //so use previously obtained handle to find the new pointer. mylist = static_cast (mfile_memory.get_address_from_handle(list_handle)); //Fill list until there is no more room in the file try{ while(1) { mylist->insert(mylist->begin(), 0); } } catch(const bad_alloc &){ //mapped file is full } //Let's obtain the new size of the list std::size_t new_size = mylist->size(); assert(new_size > old_size); //Destroy list mfile_memory.destroy_ptr(mylist); return 0; } #include