从 std::fstream 对象获取 FILE* 句柄
问题:
C std::fstream 对象可以轻松转换为 C FILE*句柄?
背景:
这种转换是可取的,因为某些 C 库接受 FILE* 句柄作为参数,但某些 C 库使用 std::fstream 作为文件
答案:
不幸的是,没有直接的跨平台方法从 std::fstream 对象获取 FILE* 句柄。
说明:
的实现std::fstream 不强制要求使用 FILE* 句柄。因此,从 std::fstream 对象中提取文件描述符并手动构造 FILE 对象可能会导致冲突和不可预测的行为。
替代方法:
不要尝试转换,而是考虑为什么需要 FILE 句柄。如果可能,探索 C 库中不需要 FILE 句柄的替代方法。
funopen() 函数:
作为不太推荐的方法,您可以研究 funopen() 函数的使用。这个 BSD 扩展允许您通过提供执行实际文件操作的函数来创建 FILE 对象。通过实现适当的函数,您可以从 FILE 对象中的 std::fstream 对象读取。然而,这种方法不可移植,也不属于 POSIX 标准的一部分。
以上是如何从 C std::fstream 对象获取 C FILE* 句柄?的详细内容。更多信息请关注PHP中文网其他相关文章!