从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
实际打开文件的对象中读取。
- 3 回答
- 0 关注
- 992 浏览
添加回答
举报
0/150
提交
取消