从std :: fstream获取文件*

从std :: fstream获取文件*

是否有(跨平台)方法从C ++ std :: fstream获取C FILE *句柄?

我问的原因是因为我的C ++库接受fstreams并且在一个特定的函数中我想使用接受FILE *的C库。


繁花如伊
浏览 993回答 3
3回答

慕莱坞森

最简洁的答案是不。原因是因为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实际打开文件的对象中读取。
打开App,查看更多内容
随时随地看视频慕课网APP