2

会社の監視プログラムの 1 つにいくつかのエラー アラートをコーディングしようとしていますが、C の system() コマンドからの戻り値を使用してコードを作成することはあまりうまくいきません。コードは scp トランザクションを呼び出してファイルを取り出します。別のサーバー.....システムがダウンしている場合、または接続が失敗した場合にエラーをフラグする必要があります。

「echo $?」でエラーの戻り値を調べてみました。0 は成功したリターンのように見えますが、1 はそれ以外のものですが、それをアプリケーションにコーディングしても、失敗した試行は検出されません。コマンドラインから戻り値を取得しようとしましたが、その値が実際にアプリケーションの実行中に返されたものであるかどうかはわかりません。

一番下の行は、system() コマンドが失敗を返すときにキャッチすることなので、より良い解決策があるかどうかはわかりません。

皆さんありがとう。

編集:エラーを特定するために使用しているコードの抜粋を次に示します。

if ( system(cmd) != 0 ); 
{
  sftpCrash = TRUE;
  printf("FTP crash detected.")
  return;
}

次に、 int sftpCrash が呼び出し元の関数に返され、次のように実行されます。

if ( sftpCrash == TRUE)
{
  Node->color = RED; //Posts an error to our monitoring application
  sprintf(reason, "Failure on SFTP connection to %s. Please check server status.",    
  getenv("HOSTNAME"));
  printf(("SFTP crashed. Should post error alert."));
}

これはすべて UNIX サーバー上で実行および実行されています。

4

1 に答える 1

2

の戻り値はsystem()、戻りステータスの一部として渡されます。WEXITSTATUS(status)それを取得するために使用します。

int status = system("my command");
if (status != -1) { // -1 means an error with the call itself
    int ret = WEXITSTATUS(status);
    ...
}
于 2013-06-26T14:12:40.620 に答える