テーマ:プログラミングあれこれ(230)
カテゴリ:C++
Windowsで別アプリケーションの出力結果が欲しいとき、パイプを使用する。
_popenを使うと手っ取り早くできる。 ただし、実行時にコマンドプロンプトが出てきて非表示にできないのと、標準入力と標準出力を同時に設定できない。 これが嫌な時は、おとなしくCreateProcessで作ろう。 _popen, _wpopen : Microsoft Docs
std::shared_ptr<FILE> pipe(_popen("count.exe", "r"), [](FILE* ptr) { _pclose(ptr); }); if (!pipe) { exit(-1); } char buff[256] = {}; while (feof(pipe.get()) == false) { auto get_result = fgets(buff, 256, pipe.get()); if (get_result != nullptr) { std::cout << buff << std::endl; } } _popenで実行したアプリの出力を feof で待っているが、呼び出されたアプリ(サンプルではcount.exe)が終了するとループを抜ける。 自作アプリじゃなくても ping などのコマンドの結果をもらうのに使用すると良い。 ROOMで気になった商品を掲載してます。 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2021.09.19 06:00:05
コメント(0) | コメントを書く
[C++] カテゴリの最新記事
|