创建一个 fstream
对象的常用方式是:
ifstream fobj("myfile.txt");
比如使用文件名。
但我想使用文件描述符创建一个ifstream对象。
原因:我想使用
_popen()
执行一个命令。_popen()
将输出作为一个FILE*
返回。因此涉及到一个FILE*
指针,而没有文件名。
您不能仅使用标准的C++来实现此操作,因为iostreams和C I/O是完全独立且不相关的。但是,您可以编写自己的iostream,该iostream由C FILE流支持。我相信GCC作为库扩展提供了一种这样的流类。
或者,如果您只想以对象方式包装C FILE流,您可以使用唯一指针来实现这个目的。
std::fread
,使用一个中间缓冲区,并将读取的字节追加到结果字符串中。或者研究一下那些GCC扩展。 - Kerrek SB你可以尝试使用QTextStream。
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);
popen
返回的FILE *
上使用fileno
,因此这是https://dev59.com/0HE85IYBdhLWcg3wgDpI的副本。 - Alnitak