• 締切済み

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

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>systemだと、シェルも動作できるのでこの戻り値はOS(or cygwin) >からの戻り値になると考えています。この理解で正しいでしょうか? 多分違う。 system() は結局、内部でシェルを fork() してコマンドを実行、そのプロセスの終了ステータスを戻しているだけだったかと。 WEXITSTATUS(status) マクロとかを使えばよいのでは? この例の場合はむしろ自前で fork() した方が早いと思う。

whatsnew
質問者

お礼

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

関連するQ&A