C言語やC++では、system()関数を利用することでコマンドを実行できます。
しかし、system()関数は、戻り値としてコマンドの成否しか返さないため、実行したコマンドの詳細なステータスを取得することができません。
(system関数()は、シェルの実行結果を返します。そのため、コマンドでエラーが発生した場合、どのようなエラーなのかまで特定できません)
ここでは、Linux環境で詳細な終了ステータスを取得する方法について説明します。

Linuxで詳細な終了ステータスを取得したい場合、WEXITSTATUS()マクロを利用します。

以下、サンプル。
例として、ネットワークコマンドのpingコマンドを用いて説明します。
《実行手順》
 1.テキストエディタを開く。
 2.以下のコードをコピーする。
 3.拡張子を「.cpp」にして保存する。
 4.コンソールを起動する。
 5.以下のコマンドを入力する。
    # cd ソースファイルを保存したディレクトリパス
# g++ ./ソースファイル名

  例)ファイルの保存先が「/usr/syssample.cpp」の場合
        # cd /usr
# g++ ./syssample.cpp

   →これでカレントディレクトリ(例の場合は「/usr」)に「a.out」という実行ファイルが作成されます。
 6.作成した実行ファイルを実行する。
# ./a.out

※コマンド入力する際、「#」は入力不要です。
 (コマンドであることを示すための記号です)


《コード》
#incldue <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]){
int ret;
int state;

//コマンドの実行
ret = system("ping -c 192.168.1.1");

//子プロセスが正常に終了している場合のみステータスを取得
if(WIFEXITED(ret)){
state = WEXITSTATUS(ret);
}else{
state = -1;
}

printf("STATUS=%d\n", state);

return ret;
}

上記のサンプルでは、単純にステータスを取得して表示しているだけです。
stateの値が0以外の場合は、エラーが発生しています。
コマンドが返すステータスは、コマンド毎に違います。
(コマンドのステータスは、OS毎にも異なりますので、同一コマンドであっても必ず確認する必要があります)

【補足事項】
・Windows環境には、WEXITSTATUS()マクロはありません。
・WIFEXITED()マクロは、子プロセスが正常終了した場合に真(true)を返します。
 正常終了とは、子プロセスが以下のいずれかで終了した場合を指します。
  ・「exit()」または、「_exit()」が呼び出された場合
  ・「main()」から復帰した場合
・WEXITSTATUS()マクロは、子プロセスの終了ステータスをかえします。
 子プロセスが終了していない場合、正しい結果が取得できません。
 そのため、WIFEXITED()マクロが真の場合でのみ利用すべきとされています。
・g++コマンドについては、g++かgccのマニュアルを参照して下さい。
 →上記の手順では、説明の手間を省くために簡略した方式でビルドしています。