为了账号安全,请及时绑定邮箱和手机立即绑定

从std :: fstream获取文件*

从std :: fstream获取文件*

C++ C
繁花如伊 2019-08-02 17:04:32
从std :: fstream获取文件*是否有(跨平台)方法从C ++ std :: fstream获取C FILE *句柄?我问的原因是因为我的C ++库接受fstreams并且在一个特定的函数中我想使用接受FILE *的C库。
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

最简洁的答案是不。

原因是因为std::fstream不需要使用a FILE*作为其实现的一部分。因此,即使您设法从std::fstream对象中提取文件描述符并手动构建FILE对象,那么您将遇到其他问题,因为您现在将有两个缓冲对象写入同一文件描述符。

真正的问题是为什么要将std::fstream对象转换为FILE*

虽然我不推荐它,你可以尝试查找funopen()
不幸的是,这不是 POSIX API(它是BSD扩展),因此它的可移植性受到质疑。这也可能是为什么我找不到任何std::stream用这样的对象包裹过的人。

FILE *funopen(
              const void *cookie,
              int    (*readfn )(void *, char *, int),
              int    (*writefn)(void *, const char *, int),
              fpos_t (*seekfn) (void *, fpos_t, int),
              int    (*closefn)(void *)
             );

这允许您构建一个FILE对象并指定一些将用于执行实际工作的函数。如果编写适当的函数,可以让它们从std::fstream实际打开文件的对象中读取。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 992 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信