问题标签 [boost-iostreams]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
906 浏览

c++ - 实现 FUSE 文件系统:iostream、FILE* 还是普通文件描述符?

我用 C++ 实现了一个小的只读 FUSE 文件系统,它从某个多文件存档中读取数据。我使用 iostreams(实际上boost::filesystem::ifstream)来读取文件。现在我想知道这是否是一个明智的决定。

首先,iostreams 的错误消息很可怕(请参阅我的另一个问题),我不能简单地返回errno我的文件操作引起的。但其次我想知道在实现 FUSE 文件系统时使用无缓冲 IO 是否更好(不是用于读取存档索引,而是在读取文件时 - 它是一个未压缩的存档,其中文件永远不会被拆分为多个存档文件)。因为读取文件的应用程序会根据需要进行缓冲。这种缓冲只是不必要的开销吗?

(提升)iostream 的速度有多快?好吧,我可以毫无问题地从已安装的存档中播放 WAV 文件,但我仍然想知道 iostreams 是否会在我真的不需要时增加不必要的开销(它们提供的唯一优点是它们超出范围时会自动关闭文件) .

0 投票
1 回答
439 浏览

c++ - 如何防止 iostreams::mapped_file_sink 创建可执行的 txt 文件

编辑:代码示例已损坏,缺少 .is_open(),请不要使用它。我有一个相当奇怪的问题。我使用boost iostreams,它们工作得很棒,但问题是程序创建的文件是可执行的txt文件(我在ubuntu上,msg是:“”lol2.txt“是一个可执行的文本文件。”)。那么有没有办法让它成为一个常规的不可执行文件。我想更改代码,使其不会创建可执行文件,我知道我可以在从终端或 Nautilus 创建文件后更改文件。顺便说一句,这是我正在使用的代码:

0 投票
2 回答
1673 浏览

c++ - boost::iostreams 管理资源

我是 boost 及其 iostreams 包的新手,发现文档有点薄。希望有人能纠正我。我正在尝试转换我不久前编写的一小段 C# 流代码,以便在压缩流中读取。

来自文件的一部分的数据被读入内存缓冲区,该缓冲区为 zlib 解压缩器提供数据。随着时间的推移,流的消费者会选择它,当它完成时会调用Close()which 结合垃圾收集器将清理所有资源。 注意:一个重要的区别是我不是要解压整个文件,只是其中的一小部分。该文件已被搜索到某个内部位置,并且长度相对于文件的完整大小而言很小。

我正在尝试使用 Boost 在 C++ 代码中找到与此等效的最佳方法。到目前为止,我的道德等同于上述(未经测试):

我假设我可以返回包装在 a 中的过滤shared_ptr流,这将使消费者不必担心删除流,但我也有新的数据缓冲区。理想情况下,我希望消费者只调用close()流,并且某些机制(例如回调)会清理过滤器中的底层资源。要求消费者将流传递给显式释放函数也是可以接受的,但我仍然不完全确定如何首先获取底层数据缓冲区。

更清洁的替代解决方案也受到欢迎。

更新 1

我尝试松散地抓住 Cat Plus Plus 关于 std::vector 支持的驱动程序的评论。这不是我所做的,但这是我迄今为止想出的。在以下代码中,我有一个 boost::shared_array-backed 驱动程序,基于 boost 驱动程序示例。

然后我有我的函数返回一个流

在我的测试程序的主要功能中:

忽略我返回的指针永远不会被释放的事实——我尽可能简单。当我运行它时会发生什么?如果我取消注释附件 A 中的代码,我会在ui. 但是当我点击图表 B 时,我在 Boost 中深深地、深深地、深深地崩溃(有时)。好吧,废话,我超出了范围,事情就坏了,一定是一些当地人在解构并把一切都搞砸了。 data在 shared_arrayin中,在堆上,并且压缩器是根据文档构造的。

boost 构造函数或函数之一是否获取了对堆栈上对象的引用(即 io::stream 或 filtering_stream 的推送)?如果是这样的话,我有点回到堆上的非托管对象的问题上。

0 投票
3 回答
3081 浏览

c++ - 使用带有宽字符串的 boost::iostreams::mapped_file_source

如果我用一个窄字符串实例化 mapped_file_source (boost 1.46.1 ),如下所示,我没有问题:

但是,如果我尝试使用宽字符串:

我在 VC2010 SP1 中收到以下编译器错误:

如果我尝试向构造函数传递 boost::filesystem::path ,则会收到以下错误:

我觉得我遗漏了一些明显的东西,但我只是在兜圈子,试图弄清楚编译器试图告诉我什么,但我只是迷路了。那个手掌到额头的时刻只是没有发生..我做错了什么?

mapped_file.hpp 中定义的构造函数如下所示:

basic_mapped_file_params 类构造函数如下所示:

其中模板类定义为:

标题中有一些额外的帮助,上面写着:

如果我采用这种方法:

我得到了上面提到的相同的C2664错误..

我知道编译器告诉我问题出在哪里,但是查看标头源代码和评论让我相信我想要完成的事情是受支持的,只是我的方法不正确。我是否误解了头文件告诉我的内容?我知道这里的某个地方可能有关于模板实例化和显式/隐式转换的好课。

有趣的是,将我的 boost 安装升级到 1.47.0 似乎清除了C2664错误,但我仍然收到有关访问私有成员的C2248错误。

0 投票
1 回答
1093 浏览

c++ - 将 boost IOStreams 与 std::ostream_iterator 一起使用

我尝试使用基于数组设备的流并希望将流传递给std::ostream_iteratoror std::istream_iterator,但不幸的是,使用 gcc 4.3.5 时出现编译错误。

Boost::IOStreams 文档指出,取决于底层设备类别,io::stream它要么来自std::basic_istream或要么来自std::basic_ostream两者 ( )。std::basic_iostream数组设备具有可搜索的类别,因此我希望 io::stream 派生自orstd::basic_iostream并与之兼容。但不幸的是,我得到了一个编译错误。std::ostream_iteratorstd::istream_iterator

这是代码片段:

最后一行导致错误说明:

0 投票
1 回答
1681 浏览

c++ - Boost iostream:如何将 ifstream 转换为内存映射文件?

我想要的是简单地打开文件以读取内存映射文件 - 以便将来以更快的速度访问它(例如:我们打开文件读取它以结束,等待并一次又一次地读取它)同时我想要那个文件可以被其他程序修改,当他们修改它时,我希望我的 ifstream 也修改。如何使用 boost iostreams(或 boost 进程间)做这样的事情?我们可以只做高操作系统吗?嘿,这个文件应该是所有应用程序的内存映射吗?

所以我尝试这样的代码:

因此它打开或创建文件,将其放入 ram。但我无法从任何其他程序访问它(我无法编辑和保存,但我可以打开)=(如何使文件可从其他程序编辑?

0 投票
1 回答
15103 浏览

c++ - 如何在 Windows 上使用 gzip 和 bzip2 支持构建 boost iostreams

我如何建立和支持boostiostreams图书馆?gzipbzip2

0 投票
1 回答
1480 浏览

c++ - boost::iostream::filtering_streambuf 的编译错误

只是想用 bzip2 压缩一个字符串,这样我就可以用 ReadFile 通过管道发送它。

以下行给我带来了以下编译错误。

in.push(uncompressed_string);

错误 6 错误 C2027:使用未定义类型 'boost::STATIC_ASSERTION_FAILURE' c:\program files (x86)\boost\boost_1_47\boost\iostreams\chain.hpp 488 1 Agent

0 投票
2 回答
320 浏览

c++ - 文件 i/o 乱码

这两个函数之间的数据正在变得乱码。检查每一侧的变量表明数据肯定是不同的。消息大小信号确实有效。这是有问题的第二个读/写函数。这是我的写入功能及其计数器读取功能:

0 投票
0 回答
483 浏览

c++ - 如何直接使用 boost::iostreams 过滤器

如何使用 boost::iostreams::gzip_decompressor 解压缩 boost::asio::streambuf 序列?

这是我的想法(非工作伪代码):

无法更改 sinkData 和 flush 函数。多次调用 sinkdata(),然后调用一次 flush()。

boost::iostreams::gzip_decompressor 是用于此目的的最佳库吗,如果是,该怎么做?否则,还能有什么建议?