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

boost::iostreams::mapped_file file path issue

本文关键字:文件 路径 问题 file iostreams mapped Boost      更新时间:2023-10-16

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

boost documentation: 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
…

谢谢你的时间,

亚历山大

首先,我不确定对mapmode::readwrite的支持有多好,boost::iostream库的维护有多好。出于我的好奇心,我在Ubuntu 12.04上用g++-4.7.2编译的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库的提示