web-dev-qa-db-ja.com

Cでのsystem()の戻り値

Cでsystem()コマンドを使用して、_sc query mysql_または_net start mysql_などのコマンドを実行しています。

パラメータがnullポインタの場合、cmdプロセッサに問題がない場合は1を返し、それ以外の場合は0を返します。コマンドが正常に実行されると0を返します。

私の質問は:戻り値のリストを取得できますか?コマンドが無効な場合に何が返されるのか、または実行が失敗した場合の戻り値はどうなるのか? system()の戻り値に応じて色々なことをしたい。

11
Ronin

docs state system()は、実行するコマンドの新しいプロセスの作成に失敗した場合は-1を返します。それ以外の場合は、実行したコマンドの終了コードを返します。これは、UNIXでecho $?またはウィンドウでecho %ERRORLEVEL%を使用して、シェルで同じコマンドを実行した後に取得できる値と同じです。したがって、戻り値を処理する場合は、実行されたコマンドが返すものを確認する必要があります。

10
A4L

system()について詳しく知るには、man systemを実行するだけです

[〜#〜] description [〜#〜] system()は、/ bin/sh -c commandを呼び出すことにより、commandで指定されたコマンドを実行し、コマンドの完了後に戻ります。コマンドの実行中、SIGCHLDはブロックされ、SIGINTおよびSIGQUITは無視されます。

戻り値返される値は、エラー(たとえば、fork(2)が失敗した)の場合は-1で、それ以外の場合はコマンドの戻りステータスです。この後者の戻りステータスは、wait(2)で指定された形式です。したがって、コマンドの終了コードはWEXITSTATUS(status)になります。/bin/shが実行できなかった場合、終了ステータスは、exit(127)を実行するコマンドのステータスになります。 commandの値がNULLの場合、シェルが使用可能な場合、system()はゼロ以外の値を返し、使用できない場合はゼロを返します。

11

system()は、開始したプロセスの終了コードを返します。

通常、終了コードには、0の終了コードが成功を意味し、0以外の値が失敗を意味するという規則があります。さまざまな終了コードの実際の意味については、それらは各プログラムに固有であり、プログラマーの気まぐれです。実行している特定のプログラムのドキュメントを調べる必要があります(多くの場合、ドキュメント化されていないため、ソースコードを読む必要があります)。

5
nos