【发布时间】:2011-01-24 12:47:17
【问题描述】:
我正在尝试使用 std::iostream 接口更新随机访问二进制文件,并通过 seekg/seekp 管理单独的 get/put 位置。 stringstream 一切正常,但是当我使用 Boost.Iostream(特别是 boost::iostreams::stream<:iostreams:: href="http://www.boost.org/doc/libs/1_41_0/libs/iostreams/doc/classes/file_descriptor.html#file_descriptor" rel="nofollow" target="_blank">file_descriptor>)创建基于文件描述符的流时,get/put 位置是不再独立。
我从Modes 上的文档中收集到,我正在寻找的是“双重可搜索”流。文档显示 Mode 是 stream 的模板参数,“主要供内部使用”,但这似乎(不再?)正确。相反,模式(又名类别?)直接取自设备:
template< typename Device,
typename Tr = ...,
typename Alloc = ...>
struct stream : detail::stream_base<Device, Tr, Alloc> {
public:
typedef typename char_type_of<Device>::type char_type;
struct category
: mode_of<Device>::type,
closable_tag,
detail::stream_traits<Device, Tr>::stream_tag
{ };
主要问题:是否有某种方法可以从设备(例如 file_descriptor(标记为可搜索但不是双搜索))获得双重搜索行为?
次要问题:对于 seekg/seekp 的独立性是否有任何一般性保证?我从网络搜索中收集到 stringstream 似乎是独立的,但 fstream 可能不是。但是,我找不到任何权威的东西。
【问题讨论】: