2012-01-20 7 views
2

は私が私の現在のフォルダ内の任意のtest12.outファイルがイマイチシステムによって実行コマンドのステータス()

#include <sys/stat.h> 
#include <stdio.h> 

int 
main(int argc, char *argv[]) 
{ 
    int a = system("./test12.out"); //here if i am giving any wrong commad 
    system("echo $?") 
    printf("system return is %d",a); 
} 

私のCコードで一つのシステムコールを使用しています参照を取得する方法。今、出力が

sh: ./test12.out: No such file or directory 
0 
system return is 32512 

がここにある私のシェルコマンドは失敗しましたが、私は私のCコードでどのようにしていることを知ることができますか?

編集:

a == -1場合ので、私はこの

int 
main(int argc, char *argv[]) 
{ 
    int a = system("dftg"); 

    if(a == -1) 
    printf("some error is occured in that shell command"); 
    else if (WEXITSTATUS(a) == 127) 
    printf("That shell command is not found"); 
    else 
     printf("system call return succesfull with %d",WEXITSTATUS(a)); 
} 

答えて

15

のように行くことができ、呼び出しが失敗しました。それ以外の場合、終了コードはWEXITSTATUS(a)です。

RETURN VALUE 
     The value returned is -1 on error (e.g. fork(2) failed), and the 
     return status of the command otherwise. This latter return status is 
     in the format specified in wait(2). Thus, the exit code of the command 
     will be WEXITSTATUS(status). In case /bin/sh could not be executed, 
     the exit status will be that of a command that does exit(127). 

     If the value of command is NULL, system() returns non-zero if the shell 
     is available, and zero if not. 
+2

+1、自分の回答を削除しました。 '-1'を別に確認してください。 –

+0

私の編集を参照してください...それは正しいですか? –

3

WEXITSTATUSを使用してみてください:0ではないことを

int a = WEXITSTATUS(system("./test12.out")); 
1

はチェックman 3 systemを引用する

。 2行目は0と表示されています。これは以前の履歴がない別のシェルで実行されたため、新しいシェルでは「すべてはOKです」というメッセージが表示されます。

0

あなたははOpenGroupのウェブサイトで男を読んだとき、それは言う:

コマンドがNULLポインタで、システム(ある場合)は、非ゼロのコマンドプロセッサが利用可能であることを示すために返還しなければならない、または存在しない場合はゼロ が利用可能です。 [CX] command()がNULLの場合、system()関数は常に0以外の値を返します。 コマンドがヌルポインタでない場合

[CX]、システム()のwaitpidで指定されたフォーマット ()内のコマンド言語インタプリタの 終了ステータスを返します。終了ステータスは、 shユーティリティで定義されているとおりでなければなりません。それ以外の場合、終了ステータスは指定されていません。 子プロセスが作成された後でコマンド言語インタープリタが を実行できないようなエラーがある場合、system() の戻り値は、コマンド言語インタープリタがexit(127)または_exit(127)を使用して終了した場合と同じになります。子プロセスを作成できない場合、または コマンド言語インタープリタの終了ステータスを にすることができない場合、system()は-1を返し、errnoに エラーを示す値を設定します。

0

使用

system("your command; echo $?"); 

echo $?は - あなたのコマンドの終了ステータスを提供します。

(終了ステータスのみが必要な場合は/ dev/nullへのリダイレクトを使用してコマンドの出力を避けることができます)

+0

ここではターミナルでそのコマンドのステータスを表示しますが、将来の使用のためにあなたのコードにそのコマンドを入れることはできません。 –

関連する問題