我可以使用FILE*来初始化c++ ostream对象吗?

Can I use a FILE* to initialize a C++ ostream object?

本文关键字:ostream c++ 对象 初始化 可以使 FILE 我可以      更新时间:2023-10-16

可以在其他地方打开吗

FILE* f = ...

东西初始化一些std::ostream实例?像这样(伪代码):

FILE *f = ...;
std::ostream os;
os./*bind_to_f*/( f );    // HOW?
os << "Hello world" << std::endl;

FILE*和streams分别是C和c++风格的I/O能力。由于c++库并不总是知道底层C库的实现,所以没有办法做到这一点。另外,考虑一下,如果可以这样做,所有权语义会是什么?

使用GCC,您可以将现有的文件描述符传递给构造函数(ref):

FILE *f = ...;
std::ofstream os(fileno(f));
构造函数:ofstream::ofstream (int fd)

使用文件描述符fd创建一个ofstream来写一个已经打开的文件。

如果您要创建一个在内部使用FILE*的streambuf类,您可以这样做。例如,HP OpenVMS似乎有这样一个类