创建一个众所周知的方式fstream
对象是:
ifstream fobj("myfile.txt");
即。 使用的文件名。
但是,我想创建使用文件描述符的ifstream的对象。
原因:我想执行一个命令使用
_popen()
_popen()
返回的输出作为FILE*
。 所以,这牵涉到FILE *指针,但没有文件名。
创建一个众所周知的方式fstream
对象是:
ifstream fobj("myfile.txt");
即。 使用的文件名。
但是,我想创建使用文件描述符的ifstream的对象。
原因:我想执行一个命令使用
_popen()
_popen()
返回的输出作为FILE*
。 所以,这牵涉到FILE *指针,但没有文件名。
你不能这样做,只是在标准C ++,因为iostream和CI / O是完全独立的,不相关的。 然而,你可以写你自己的 iostream这是由一个C文件流的支持。 我相信,GCC自带一个这样的流类的库扩展。
或者,如果你想要的是包装一个C文件流的对象-Y的方式,你可以使用一个唯一的指针用于这一目的。
你可以创建一个字符串,并用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);