如何从 POSIX 文件描述符构造 C fstream?
理解困境
从 POSIX 文件描述符构建 C fstream 看起来很简单,但它事实证明这是一个复杂的挑战。问题出现了:这种简单的认识是一种误解还是一个真正复杂的过程?
可能的解决方案和注意事项
1。非标准库扩展:
根据 Éric Malenfant 接受的答案,在标准 C 中可能无法通过 fstream 访问 POSIX 文件描述符。但是,标准库的特定实现(例如 libstdc )可能会提供允许此功能的非标准扩展。例如,libstdc 提供了一个 fstream 构造函数,它接受文件描述符作为输入。
2.使用非标准文件处理的自定义解决方案:
或者,可以实施自定义解决方案。对于 libstdc ,可以使用 __gnu_cxx::stdio_filebuf 类模板。该模板继承自 std::basic_streambuf 并拥有一个将文件流缓冲区与打开的 POSIX 文件描述符关联起来的构造函数。然后可以将此缓冲区分配给 istream 对象,以方便对文件进行操作。
3. Microsoft Visual C 实现:
Microsoft Visual C 为接受 FILE 参数的 ifstream 提供非标准构造函数。尽管此构造函数未记录,但它可以从使用“_fdopen”获得的 C 流创建 ifstream 对象,以将 POSIX 文件句柄转换为 FILE。
结论:
从 POSIX 文件描述符构造 C fstream 是可行的,但有一些注意事项。标准库中缺乏明确的支持,因此需要使用非标准扩展或自定义解决方案。最合适的方法取决于所使用的特定平台和编译器。
以上是C fstream 可以从 POSIX 文件描述符构造吗?的详细内容。更多信息请关注PHP中文网其他相关文章!