我需要在c++项目中使用现有的C库。我的问题是C现有库使用FILE*作为流,是否有一种标准的兼容方式来使用FILE*流来放置或从c++流中获取?
我尝试在c++ 11标准中查找FILE*,但它只出现在几个例子中。
-
编辑,例子。
我们有一个在FILE*:
中写入的函数fputs(char const*, FILE*)
Auto STRM = std::cout;
我可以,在一个标准的兼容的方式,使用输出写入字符串吗?
您还可以考虑一个类似的输入示例,使用C函数从FILE*和c++输入流中读取。
检查这个答案,
https://stackoverflow.com/a/5253726/1807864#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ofstream ofs("test.txt");
ofs << "Writing to a basic_ofstream object..." << endl;
ofs.close();
int posix_handle = ::_fileno(::fopen("test.txt", "r"));
ifstream ifs(::_fdopen(posix_handle, "r")); // 1
string line;
getline(ifs, line);
ifs.close();
cout << "line: " << line << endl;
return 0;
}
c++标准,除了极少数例外,说明C的功能都包括在内。当然,所有标准的C FILE *
功能都得到了支持[显然,这取决于平台对FILE *
的一般支持-一个没有"文件"(例如没有存储)的嵌入式系统通常很难对FILE *
有多少有用的支持-也不会c++风格的fstream
工作]。
所以,只要你不试图同时从c++ fstream
和C FILE *
读/写同一个文件,它应该工作得很好。但是,您需要在c++和C访问之间关闭文件。
据我所知,这样做是不可移植和非标准的。它在实践中是否有效是另一个问题。我会在遗留代码周围创建包装类,或者像在C中那样直接使用FILE*流——它们并没有那么糟糕。:)