プロが教える店舗&オフィスのセキュリティ対策術

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です。

A 回答 (1件)

>systemだと、シェルも動作できるのでこの戻り値はOS(or cygwin)


>からの戻り値になると考えています。この理解で正しいでしょうか?

多分違う。

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

この例の場合はむしろ自前で fork() した方が早いと思う。
    • good
    • 0
この回答へのお礼

有難うございます。
forkは初耳だったもので、調べてみました。
fork: 子プロセスを生成
exec: プロセスを実行
という感じのようですね。
http://www.slogical.co.jp/tech/unixc_forkexec.html

お礼日時:2008/04/19 09:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A