私はC++system()
関数でいくつかのコマンドを実行しています:
int system ( const char * command );
発行されたコマンドから標準出力を収集するにはどうすればよいですか?
具体的には、発行されたコマンドの出力(たとえば、コマンドの発行からの出力を一覧表示するディレクトリdir
)を収集したいと思います。
system()
を返すint
ので、それをつかむだけです:int rvalue = system(command);
ただし、system()が返す内容の正確な詳細はシステム固有であると思います。
通常、システムプログラムが値を「返す」には、stdoutに書き込む方法と、プログラムの最後にステータス整数を返す方法の2つの方法があります。(たとえば、ファイルやデータベースに書き込むなど、結果を返す方法は他にもありますが、ここでは範囲外だと思います)。
ステータスコードを受け取るには、system
関数の戻り値を確認するだけです。
出力を受信するには、出力をファイルにリダイレクトし、後でファイルを読み取るか、を使用しますpopen
。
の戻り値は(皮肉なことに)システムに依存しますが、POSIXシステム(Linuxなどを含む)では、待機system
の場合と同じです。下位8ビットまたは16ビットは、子の終了ステータスです(おそらく「 ")によって返される値、子を終了した信号の種類を示す上位ビット(存在する場合)。私が提供したマンページへのURLは、その戻り値をこじ開けるために使用できるプリプロセッサマクロを提供します。
コメントで明確にしたので、プログラムの「戻り文字列」のようなものはありません。すでに述べた別の答えとして、他のプログラムによって出力popen
されるテキストが必要な場合は、の代わりにを使用する必要がありsystem
ます。
system()は、 libcで宣言および定義されています。私が提供した最初のリンクを読むかman system
、シェルのコマンドプロンプトで読むことができます。
他の人も言っているように、popen()関数をお勧めしますが、この問題はプラットフォーム固有です。popen()関数は、POSIXAPIを使用するオペレーティングシステムで使用できます。このコマンドがWIN32などの他のAPIで機能するかどうかはわかりません