创建 fstream
对象的众所周知的方法是:
ifstream fobj("myfile.txt");
即。使用文件名。
但我想使用文件描述符创建一个ifstream对象。
原因:我想使用
_popen()
执行命令。_popen()
将输出作为FILE*
返回。所以有一个FILE *指针但没有文件名。
答案 0 :(得分:3)
你不能只在标准C ++中这样做,因为iostreams和C I / O是完全独立和无关的。但是,您可以编写由C FILE流支持的自己的 iostream。我相信GCC附带了一个这样的流类作为库扩展。
或者,如果您想要的只是一种包装C FILE流的对象方式,那么您可以use a unique pointer用于此目的。
答案 1 :(得分:-1)
您可以创建一个字符串,并使用fread来读取和追加它。它不干净,但你正在使用C接口。
这样的事情应该有效:
FILE * f = popen(...)
const unsigned N=1024;
string total;
while (true) {
vector<char> buf[N];
size_t read = fread((void *)&buf[0], 1, N, f);
if (read) { total.append(buf.begin(), buf.end()); }
if (read < N) { break; }
}
pclose(f);