从FILE *指针创建fstream的对象(Creating fstream object from

2019-07-29 10:59发布

创建一个众所周知的方式fstream对象是:

ifstream fobj("myfile.txt");

即。 使用的文件名。

但是,我想创建使用文件描述符的ifstream的对象。

原因:我想执行一个命令使用_popen() _popen()返回的输出作为FILE* 。 所以,这牵涉到FILE *指针,但没有文件名。

Answer 1:

你不能这样做,只是在标准C ++,因为iostream和CI / O是完全独立的,不相关的。 然而,你可以写你自己的 iostream这是由一个C文件流的支持。 我相信,GCC自带一个这样的流类的库扩展。

或者,如果你想要的是包装一个C文件流的对象-Y的方式,你可以使用一个唯一的指针用于这一目的。



Answer 2:

你可以创建一个字符串,并用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);


文章来源: Creating fstream object from a FILE* pointer