1

我是boost::iostream内存映射文件的新手,我在理解这些类时遇到了一些困难。

我希望我的函数能够创建一个新的内存映射文件用于写入和读取。我的写作部分很成功,但我不知道如何读回这些值。

阅读文档,看起来参数和类mapped_file_params::mode都被忽略了。mapped_file_sourcemapped_file_sink

可能我想使用它,因为它是我想使用的流seekgread.

如果这是不可能的,我还能使用什么?可以使用mapped_file_sink::data()回读吗?

在我的代码下面

namespace bip = boost::iostreams;

bio::mapped_file_params prm("data.out");
prm.new_file_size = 256; // in reality it will be bigger.
prm.mode = std::ios::in | std::ios::out;
bio::stream<bio::mapped_file_sink> ooo;
ooo.open(bio::mapped_file_sink(prm));

char AA;

AA = 'A';
ooo.write(&AA,1);

AA = 'B';
ooo.write(&AA,1);  

char BB;
bio::seek(ooo,0,BOOST_IOS::beg);    
ooo.read(&BB,1); // this fails
cout << B << endl;
4

1 回答 1

2

mapped_file_sink是只写的——这就是它忽略模式参数的原因。mapped_file_source是只读的。供读写使用mapped_file

于 2014-01-29T12:34:22.787 回答