- 締切済み
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です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- koko_u_
- ベストアンサー率18% (459/2509)
>systemだと、シェルも動作できるのでこの戻り値はOS(or cygwin) >からの戻り値になると考えています。この理解で正しいでしょうか? 多分違う。 system() は結局、内部でシェルを fork() してコマンドを実行、そのプロセスの終了ステータスを戻しているだけだったかと。 WEXITSTATUS(status) マクロとかを使えばよいのでは? この例の場合はむしろ自前で fork() した方が早いと思う。
お礼
有難うございます。 forkは初耳だったもので、調べてみました。 fork: 子プロセスを生成 exec: プロセスを実行 という感じのようですね。 http://www.slogical.co.jp/tech/unixc_forkexec.html