boost::iostreams::mapped_file проблема с путем к файлу

Я столкнулся с проблемой, используя библиотеку iostreams mapped_file для boost.

документация по ускорению: 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
…

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

Александр


person Lex    schedule 24.03.2013    source источник
comment
Можете ли вы попробовать инициализировать все параметры в конструкторе, такие как смещение?   -  person fatihk    schedule 24.03.2013
comment
Только что попробовал, ничего не изменилось   -  person Lex    schedule 24.03.2013


Ответы (1)


Во-первых, я не уверен, насколько хорошо поддерживается mapmode::readwrite и насколько хорошо поддерживается библиотека boost::iostream. Из любопытства я попробовал ваш слегка «модифицированный» код с boost 1.52 на Ubuntu 12.04, скомпилированный с помощью g++-4.7.2. Я не видел проблемы со "странным именем". Файл был создан с правильным именем, но mf.open( param ) не был завершен из-за поднятого исключения на mmap в файле: 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 в режиме отладки и отслеживать код, чтобы увидеть, что пошло не так. Здесь вы можете найти несколько советов по сборке библиотек Boost в режиме отладки.

person G. Civardi    schedule 31.05.2013