ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:whatsnew systemの戻り値を取得する方法
困り度:
  • 困っています
system関数で
int main(){
int i;
i = system("./test.exe");
printf("i=%08x", i);
}
として、test.exeを呼び出しています。
test.exeでは、
int test(){
clock_t a, b;
int i, j;
j = 0;
a = clock();
for (i=0;i<0xFFFFFF;i++) j++;
b = clock();
return (int) (b-a);
}
int main(){
int i;
i = test();
return i;
}
として、iの値を戻しています。

試したところでは、i = 63が戻り値となるはずですが、
0x3f00という値がsystem関数から渡されています。

systemだと、シェルも動作できるのでこの戻り値はOS(or cygwin)からの戻り値になると考えています。この理解で正しいでしょうか?
また、この場合のi = 63を戻す方法はあるのでしょうか?

環境はXP Home + cygwin + gcc4.3.0です。
質問投稿日時:08/04/19 01:53
質問番号:3958753
この質問に対する回答は締め切られました。

回答

良回答10pt

回答者:koko_u_ >systemだと、シェルも動作できるのでこの戻り値はOS(or cygwin)
>からの戻り値になると考えています。この理解で正しいでしょうか?

多分違う。

system() は結局、内部でシェルを fork() してコマンドを実行、そのプロセスの終了ステータスを戻しているだけだったかと。
WEXITSTATUS(status) マクロとかを使えばよいのでは?

この例の場合はむしろ自前で fork() した方が早いと思う。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/19 02:18
回答番号:No.1
この回答へのお礼有難うございます。
forkは初耳だったもので、調べてみました。
fork: 子プロセスを生成
exec: プロセスを実行
という感じのようですね。
http://www.slogical.co.jp/tech/unixc_forkexec.html