fstream
オブジェクトを作成するよく知られた方法は次のとおりです。
ifstream fobj("myfile.txt");
すなわち。ファイル名を使用します。
しかし、ファイル記述子を使用して ifstream オブジェクトを作成したいと考えています。
理由:を使用してコマンドを実行したい
_popen()
。_popen()
出力を として返しますFILE*
。そのため、FILE* ポインターが含まれていますが、ファイル名はありません。
iostream と CI/O は完全に分離されており、関連がないため、標準の C++ だけでこれを行うことはできません。ただし、C FILE ストリームに基づく独自のiostream を作成することはできます。GCC には、ライブラリ拡張などのストリーム クラスが付属していると思います。
あるいは、C FILE ストリームをラップするオブジェクトのような方法だけが必要な場合は、その目的のために一意のポインターを使用できます。
文字列を作成し、 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);