boost :: iostreams :: mapped_file文件路径问题

时间:2013-03-24 17:32:28

标签: c++ filesystems memory-mapped-files boost-iostreams

我遇到了使用映射文件iostreams boost的问题。

提升文档:mapped_file

在阅读了我可以阅读的所有文档和示例之后,我仍然无法使用以下代码。我假设当你传递一个new_file_size和一个到mapped_file_params类的路径时,它将在我使用参数中的mapped_file_params对象调用mapped_file的构造函数时,在所需的位置打开(并创建)该文件。  但它唯一能做的就是创建一个带有奇怪名称的文件,比如项目工作目录中的“%F8 / 134”,而不是我告诉它的地方。 也许我错了,应该在将文件指定给mapped_file之前创建文件?在阅读了doc之后,我假设它在你填写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
…

感谢您的时间,

亚历山大

1 个答案:

答案 0 :(得分:0)

首先,我不确定支持 mapmode :: readwrite 以及维护boost :: iostream库的效果如何。为了我的好奇心,我尝试使用g ++ - 4.7.2编译的Ubuntu 12.04上的boost 1.52略微“修改”代码。我还没有看到“奇怪名字”的问题。该文件是使用正确的名称创建的,但 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库并跟踪代码以查看出错的地方。在这里,您可以找到一些在debug mode

中构建boost库的提示