4

私はC++system()関数でいくつかのコマンドを実行しています:

int system ( const char * command );

発行されたコマンドから標準出力を収集するにはどうすればよいですか?

具体的には、発行されたコマンドの出力(たとえば、コマンドの発行からの出力を一覧表示するディレクトリdir)を収集したいと思います。

4

8 に答える 8

15

実行されたコマンドの戻り値(「終了ステータス」など)を探していますか、それともその出力(「何を出力したか」など)を探していますか?

後者の場合は、代わりにpopen()とを使用してください。pclose()

前者の場合は、からの戻り値を確認しますsystem()(そして、情報からのwaitpid()情報を使用して解釈します)。

于 2009-10-17T21:20:53.983 に答える
8

system()を返すintので、それをつかむだけです:int rvalue = system(command);

ただし、system()が返す内容の正確な詳細はシステム固有であると思います。

于 2009-10-17T21:17:07.893 に答える
3

通常、システムプログラムが値を「返す」には、stdoutに書き込む方法と、プログラムの最後にステータス整数を返す方法の2つの方法があります。(たとえば、ファイルやデータベースに書き込むなど、結果を返す方法は他にもありますが、ここでは範囲外だと思います)。

ステータスコードを受け取るには、system関数の戻り値を確認するだけです。

出力を受信するには、出力をファイルにリダイレクトし、後でファイルを読み取るか、を使用しますpopen

于 2009-10-17T21:18:52.473 に答える
3

の戻り値は(皮肉なことに)システムに依存しますが、POSIXシステム(Linuxなどを含む)では、待機systemの場合と同じです。下位8ビットまたは16ビットは、子の終了ステータスです(おそらく「 ")によって返される値、子を終了した信号の種類を示す上位ビット(存在する場合)。私が提供したマンページへのURLは、その戻り値をこじ開けるために使用できるプリプロセッサマクロを提供します。

コメントで明確にしたので、プログラムの「戻り文字列」のようなものはありません。すでに述べた別の答えとして、他のプログラムによって出力popenされるテキストが必要な場合は、の代わりにを使用する必要がありsystemます。

于 2009-10-17T21:23:48.683 に答える
0

system()は、 libcで宣言および定義されています。私が提供した最初のリンクを読むかman system、シェルのコマンドプロンプトで読むことができます。

于 2009-10-17T21:18:25.317 に答える
0

他の人も言っているように、popen()関数をお勧めしますが、この問題はプラットフォーム固有です。popen()関数は、POSIXAPIを使用するオペレーティングシステムで使用できます。このコマンドがWIN32などの他のAPIで機能するかどうかはわかりません

于 2009-10-17T21:40:55.220 に答える