众所周知的创建fstream
对象的方法是:
ifstream fobj("myfile.txt");
IE。使用文件名。
但我想使用文件描述符创建一个 ifstream 对象。
原因:我想使用
_popen()
._popen()
以 a 形式返回输出FILE*
。所以有一个 FILE* 指针,但没有文件名。
您不能仅在标准 C++ 中做到这一点,因为 iostream 和 CI/O 是完全独立且不相关的。但是,您可以编写自己的由 C 文件流支持的 iostream。我相信 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);