059262 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

田舎暮らしエンジニアの備忘録

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2021.09.19
XML
カテゴリ:C++
Windowsで別アプリケーションの出力結果が欲しいとき、パイプを使用する。
_popenを使うと手っ取り早くできる。

ただし、実行時にコマンドプロンプトが出てきて非表示にできないのと、標準入力と標準出力を同時に設定できない。
これが嫌な時は、おとなしくCreateProcessで作ろう。

_popen, _wpopen : Microsoft Docs
  • サンプルコード
    std::shared_ptr<FILEpipe(_popen("count.exe""r"), [](FILE* ptr) { _pclose(ptr); });
    if (!pipe)
    {
        exit(-1);
    }

    char buff[256] = {};
    while (feof(pipe.get()) == false)
    {
        auto get_result = fgets(buff256pipe.get());
        if (get_result != nullptr)
        {
            std::cout << buff << std::endl;
        }
    }

_popenで実行したアプリの出力を feof で待っているが、呼び出されたアプリ(サンプルではcount.exe)が終了するとループを抜ける。

自作アプリじゃなくても ping などのコマンドの結果をもらうのに使用すると良い。





ROOMで気になった商品を掲載してます。







お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.09.19 06:00:05
コメント(0) | コメントを書く



© Rakuten Group, Inc.