我不知道为什么在创建mapped_file_sink对象时抛出异常。
例外:
terminate called after throwing an instance of
'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::exception> >'
int main(int argc,char *argv[])
{
boost::iostreams::mapped_file_sink sink(argv[1]);
char temp[] ="AAAA";
memcpy(sink.data(), temp, sizeof(temp));
sink.close();
return 1;
}
答案 0 :(得分:0)
文件AAAA
很可能不存在。要创建文件,您需要使用boost::iostreams::mapped_file_params
变量打开内存映射文件,其new_file_size
字段将设置为所需的文件大小。
答案 1 :(得分:0)
在64位Linux虚拟机中使用boost 1.53,我也遇到了上面报告的异常。
我最终将其追溯到许可问题。当我从虚拟盒共享文件夹运行我的测试时,我可以创建和大小文件,但是当BOOST_IOSTREAMS_FD_MMAP调用cleanup_and_throw(“失败的映射文件”)失败时,我会得到神秘异常。
throw enable_current_exception(enable_error_info(e))中的某个地方;调用“失败的映射文件:无效参数”消息将丢失。
如果从我的主文件夹运行相同的代码,则api按预期工作。
所以问题的实质归结为权限。我希望这可以帮助遇到此事的任何人。
drwxrwx --- root vboxsf
VS
drwxr-xr-x用户用户