-3

コマンドがsystem(cCmdInput);失敗したかどうかを知り、失敗した場合はエラーを表示することは可能ですか。

cout << endl << "Enter command> ";
getline(cin, cmdInput);
try{
    cin.clear();
    const char *cCmdInput = cmdInput.c_str();
    system(cCmdInput);
}catch (...){
    cout << "An error occurred";
}
4

3 に答える 3

1

まず、system()セキュリティ上の大きなリスクがあるため、使用しないでください(特に、上記のコードのようにユーザーからの入力を使用する場合)。むしろ、exec()関数のファミリーを見てください。

しかし、あなたの質問に答えるために、system()例外をスローしないでください。あなたはそれが何を返すかをチェックする必要があります。ドキュメントによると、通常、実行したコマンドのステータスコードが返されます。使用しているコマンドの戻りコードを調べて、system()それらに対して値が返されることを確認する必要があります。ただし、通常、戻り値0は成功を意味します。

例えば:

if(system(cCmdInput) != 0)
   cout << "Error" << endl;
于 2013-01-13T18:15:35.210 に答える
1

systemはC関数であり、例外をスローしません。代わりに、実行が成功した場合に解釈に使用できる値を返します。

文書によると

返される値は、エラーの場合は-1(たとえば、fork(2)が失敗した場合)であり、それ以外の場合はコマンドのステータスを返します。

通常、リターンステータス0は成功を示します。

于 2013-01-13T18:16:51.893 に答える
0

実際には、*nix と Windows では、system関数は実行したプログラムのプロセス終了コードを返します。

したがって、行儀の良いプログラムを実行するには、結果が 0 かどうかを確認するだけです。慣例により、プロセス終了コード 0 は成功を意味し、その他の値は失敗を意味します。

ただし、多くの Windows プログラムは、エラーを示すプロセス終了コードを生成するという意味で適切に動作していないことに注意してください。echo %errorlevel%これは、プログラムを実行した後、Windows コマンド インタープリターで確認できます。もう 1 つの方法は、論理接続詞&&and||を使用することmyprog && echo OK || echo Bah, failed!です。

于 2013-01-13T18:19:20.950 に答える