2013-03-24 2 views
0

У меня возникла проблема с использованием библиотеки iostreams mapped_file.boost :: iostreams :: mapped_file ошибка пути к файлу

подталкивание документация: mapped_file

После прочтения всей документации и примеров, которые я мог читать, я до сих пор не могу получить следующий фрагмент кода, чтобы работать. Я предполагаю, что когда вы передаете new_file_size и путь к классу mapped_file_params, он откроет (и создаст) файл в нужном месте, когда я вызову конструктор mapped_file с объектом mapped_file_params в параметре. Но единственное, что он делает, это создать файл со странным именем, например «% F8/134» в рабочем каталоге проекта, а не там, где я ему рассказывал. Возможно, я ошибаюсь, и нужно создать файл, прежде чем указывать его на mapped_file? После прочтения документа я был в предположении, что он создал новый файл, когда вы заполняете параметр new_file_size. и указывает имя файла.

Кто-нибудь испытал это раньше? Любые советы по устранению этого?

Вот код:

boost::iostreams::mapped_file_params param(filename); // filename is a std::string with the correct path 
param.flags = boost::iostreams::mapped_file::mapmode::readwrite; 
param.new_file_size = sizeNeeded; // sizeNeeded is the size of the data 
param.length = sizeNeeded; 
boost::iostreams::mapped_file fileMap(param); // at this point the file is created 
… 

Спасибо за ваше время,

Александр

+0

Можете ли вы попытаться инициализировать все параметры в конструкторе, например, смещение? –

+0

Просто попробовал, и ничего не изменил – Lex

ответ

0

Во-первых, я не уверен, насколько хорошо mapmode :: ReadWrite поддерживается и насколько хорошо подталкивание :: Поддерживается библиотека iostream. Для моего любопытства я попробовал ваш слегка «модифицированный» код с boost 1.52 на Ubuntu 12.04, скомпилированный с g ++ - 4.7.2. Я не видел проблему со «странным именем». Файл был создан с собственным именем, но mf.open (пары) не закончили за исключение поднятого на ттаре в файле: mapped_file.cpp

void* data = 
    ::BOOST_IOSTREAMS_FD_MMAP( 
     const_cast<char*>(p.hint), 
     size_, 
     readonly ? PROT_READ : (PROT_READ | PROT_WRITE), 
     priv ? MAP_PRIVATE : MAP_SHARED, 
     handle_, 
     p.offset); 
if (data == MAP_FAILED) 
    cleanup_and_throw("failed mapping file"); 

Если вы можете обновить до более новой версии я хотел бы сделать это. Кроме того, вы можете создать дополнительную библиотеку в режиме отладки и проследить код, чтобы узнать, что не так. Здесь вы можете найти некоторые подсказки для создания библиотек boost в debug mode

Смежные вопросы