2013-03-24 134 views
0

我遇到了使用mapped_file iostreams库的boost问题。boost :: iostreams :: mapped_file文件路径问题

Boost文档:mapped_file

通过所有的文档和例子我能读读书后,我仍然不能得到下面这段代码工作。我假设当你传递一个new_file_size和一个到mapped_file_params类的路径时,它会在我使用参数中的mapped_file_params对象调用mapped_file的构造函数时打开(并创建)所需位置的文件。 但它唯一能做的就是用一个奇怪的名字创建一个文件,比如项目工作目录中的“%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

你可以尝试初始化构造函数中的所有参数,比如offset吗? – 2013-03-24 18:29:00

+0

只是试了一下,它没有改变任何东西 – Lex 2013-03-24 19:39:41

回答

0

首先,我不知道mapmode如何::读写是支持和推动有多好:: iostream库被维护。为了我的好奇心,我在Ubuntu 12.04上用g ++ - 4.7.2编译了一些稍微“修改过”的代码,其boost 1.52版本。我没有看到“奇怪的名字”的问题。该文件是用正确的名称创建,但mf.open(PARAM)没有在文件中完成对出现的异常对MMAPmapped_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库debug mode