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

2021.09.19
XML
カテゴリ: 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) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: