0

我在使用 boost 的 mapped_file iostreams 库时遇到了问题。

提升文档: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
…

谢谢你的时间,

亚历山大

4

1 回答 1

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 库并跟踪代码以查看出错的地方。在这里您可以找到一些在调试模式下构建 boost 库的提示

于 2013-05-31T14:14:52.030 回答