我遇到了使用映射文件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
…
感谢您的时间,
亚历山大
答案 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库的提示