dosコマンドの出力をC / C ++のプログラム変数に読み書きする方法

StackOverflow https://stackoverflow.com/questions/1404189

  •  05-07-2019
  •  | 
  •  

質問

たとえば" dir"などのプログラムからdosコマンドを実行したいコマンド。

system("dir");

そのコマンドの出力をプログラム変数に直接読み込む方法はありますか?

次のようにして、出力をいつでもファイルにリダイレクトし、そのファイルを読み取ることができます
system(" dir> command.out");

そして、command.outファイルを読み込みます。しかし、ファイルにリダイレクトしてから読み取るのではなく、どうすれば直接行うことができますか?

役に立ちましたか?

解決 3

別の方法、またはpopenに相当するwindowsを見つけました。 _popen()です。これは私にぴったりで、しかも使いやすいです。

   char   psBuffer[128];
   FILE   *pPipe;

   if( (pPipe = _popen( "dir", "rt" )) != NULL)
  {
     while(fgets(psBuffer, 128, pPipe))
     {
       printf(psBuffer);
     }
  }

詳細な例については、こちら。

他のヒント

ライブラリにPOSIX関数 popen()がある場合、それが必要です。パイプからコマンド出力を読み取り、任意の方法で解析できます。

FILE *dir;
char direntry[80];

dir = popen("dir", "r");
while (!feof(dir)) {
    fgets(direntry, sizeof(direntry), dir);
    /* do something with direntry */
}

popen()を使用すると、希望どおりに動作します。
双方向パイプを作成し、プロセスを分岐します。子では、パイプを標準入力および標準出力に接続してから、popen()の最初のパラメーターとして指定されたコマンドを実行します。

#include <stdio.h>
#include <string>
#include <iostream>

int main()
{
    std::string     output;
    FILE*           data    = popen("cat PLOP","r");

    for(char c = getc(data);c != EOF;c = getc(data))
    {
        output  += c;
    }
    pclose(data);

    std::cout << "Data(" << output << ")\n";
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top