我基本上是在寻找 fdopen() 的 C++ 版本。我对此进行了一些研究,这是其中似乎应该很容易的事情之一,但结果却非常复杂。我是否在这种信念中遗漏了一些东西(即它真的很容易)?如果没有,是否有一个好的图书馆可以处理这个问题?
编辑:将我的示例解决方案移至单独的答案。
原文由 BD at Rivenhill 发布,翻译遵循 CC BY-SA 4.0 许可协议
我基本上是在寻找 fdopen() 的 C++ 版本。我对此进行了一些研究,这是其中似乎应该很容易的事情之一,但结果却非常复杂。我是否在这种信念中遗漏了一些东西(即它真的很容易)?如果没有,是否有一个好的图书馆可以处理这个问题?
编辑:将我的示例解决方案移至单独的答案。
原文由 BD at Rivenhill 发布,翻译遵循 CC BY-SA 4.0 许可协议
这实际上很容易。 Nicolai M. Josuttis 发布了 fdstream
连同他的书 The C++ Standard Library - A Tutorial and Reference 。你可以在 这里 找到 184 行的实现。
原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
从Éric Malenfant给出的答案:
基于上述观察和我在下面的研究,有两种变体的工作代码;一个用于 libstdc++,另一个用于 Microsoft Visual C++。
libstdc++
有非标准
__gnu_cxx::stdio_filebuf
继承std::basic_streambuf
—的类模板并具有以下构造函数带描述 此构造函数将文件流缓冲区与打开的 POSIX 文件描述符相关联。
我们通过 POSIX 句柄(第 1 行)创建它,然后将其作为 basic_streambuf 传递给 istream 的构造函数(第 2 行):
微软视觉 C++
曾经有非标准 版本 的 ifstream 构造函数采用 POSIX 文件描述符,但 当前 文档和代码都缺少它。 ifstream 构造函数的另一个非标准版本采用 FILE*
并且没有记录(我什至找不到任何旧文档)。我们调用它(第 1 行),参数是调用 _fdopen 以从 POSIX 文件句柄获取 C 流 FILE* 的结果。