私の人生の大半は、cstdio
を使っています。今度はiostream
に移行しようとしています。 「bar.cpp」と呼ばれる別のプログラムでは.exeを実行し、stdinとandをリダイレクト
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
、私がfooの実行可能ファイルを呼び出します。
は、私はこのようになります「foo.cpp」と呼ばれる別のプログラムがあるとします。私は、ファイルに標準入出力をリダイレクトしたい場合は過去に、私はそうのようなfreopen
を使用します。
int main(){ // bar.cpp, redirecting stdin and stdout
freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
freopen("foo.out", "w", stdout);
system("foo.exe"); // "foo.out" will contain "47"
}
を今、私はstringstreamsにstd::cin
とstd::cout
をリダイレクトしようとしています。このような何か:
int main(){ // bar.cpp, redirecting cin and cout
std::istringstream instr("62");
std::ostringstream outstr;
std::cin.rdbuf(instr.rdbuf());
std::cout.rdbuf(outstr.rdbuf());
system("foo.exe"); // outstr should contain "67"
}
しかし、私が学んだことは「FOO.EXE」を実行する際にstd::cin
とstd::cout
がリダイレクトされなかったことです。プログラムはユーザー入力を期待しており、std::cout
に印刷されます。 "foo.exe"の実行が完了すると、bar.cpp内のstd::cin
とstd::cout
はまだそれぞれinstr
とoutstr
にリダイレクトされたままです。
私の質問は、私が意図したようにiostream
でそれを行う方法はありますか?freopen
を使用していますか?
オペレーティングシステムは、実行可能ファイルの出力の処理を担当しています。 C++言語には出力をリダイレクトする機能がありません。 –
プログラム間でデータを共有するための一般的なソリューション:ファイル、ソケット、パイプ(他のプログラムの出力をプログラムの標準入力にパイプするためにOSに指示する)、共有メモリ領域。インターネットで検索。 –
同じfreopenコールを試したことがありますか? – stark