可以在其他地方打开吗
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似乎有这样一个类