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

发布于 2024-11-08 06:41:12 字数 554 浏览 3 评论 0原文

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

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

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

I implemented a small read-only FUSE filesystem in C++ that reads the data from a certain multi-file archive. I used iostreams (actually boost::filesystem::ifstream) in order to read the files. Now I wonder if that was a wise decision.

First the error messages of iostreams are horrible (see another question by me) and I can't simply return the errno my file operations caused. But second I wonder if it may be better to use unbuffered IO when implementing a FUSE filesystem (not for reading the archive index but when reading the files - it's an uncompressed archive where files never are split to multiple archive files). Because the application reading the file will buffer if it wants to. Is this buffering just unnecessary overhead?

Also how fast are (boosts) iostreams? Well I can play WAV files from the mounted archive without problems, still I wonder if iostreams just add unnecessary overhead when I don't really need then (the only advantage they provide is that they automatically close the file when they go out of scope).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文