慕莱坞森
最简洁的答案是不。原因是因为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实际打开文件的对象中读取。