質問 |
||
| 質問者: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 |