C言語関係掲示板

過去ログ

No.345.system関数の戻り値について

[戻る] [ホームページ]

No.2225

system関数の戻り値について
投稿者---こう(2002/07/29 00:45:56)


OSが、HP-UX11.00で、C言語なのですが、
プログラムからsystem関数を使ってシェルスクリプトを実行しています。
その際、シェル内の処理で失敗した場合、「exit 1」、「exit 2」で
終了しているのですが、その時のsystemでの戻り値が、256、512と
なります。
リトル・エンディアン、ビック・エンディアンとかと思うのですが、
メモリの操作が行われているのですが、どのような動きでそうなるの
ですか。
また、system関数の戻り値を基にしえ、シェルスクリプトでの終了値を
求めたいのですが、シフト演算とかでできるのですか。
どうすればよいのでしょうか。

No.2227

Re:system関数の戻り値について
投稿者---kikk(2002/07/29 03:05:41)


ども。


規格では、system()の返り値は処理系定義になっています。
system()で返ってきた値が、実行したプロセスの返り値そのもの
であるということは必ずしもいえません。


で。
HP-UXで実際に試したわけではないのですが、参考までに。

たぶん、sys/wait.hにWEXITSTATUS()というマクロがあるので、これを
介せば実際のプロセスの返り値が得られます。

ex.
return_value = WEXITSTATUS(system(exec_str));

このへんの詳細はexit(システムコール/Cライブラリとも), system, wait
あたりのマニュアルをみてください。


>OSが、HP-UX11.00で、C言語なのですが、
>プログラムからsystem関数を使ってシェルスクリプトを実行しています。
>その際、シェル内の処理で失敗した場合、「exit 1」、「exit 2」で
>終了しているのですが、その時のsystemでの戻り値が、256、512と
>なります。
>リトル・エンディアン、ビック・エンディアンとかと思うのですが、
>メモリの操作が行われているのですが、どのような動きでそうなるの
>ですか。

おそらくintの長さは4バイトだと思うので、少なくともエンディアンの
問題ではないでしょう。


>また、system関数の戻り値を基にしえ、シェルスクリプトでの終了値を
>求めたいのですが、シフト演算とかでできるのですか。
>どうすればよいのでしょうか。

自前でやってもいいですが、上記のようなマクロか何かがおそらく
使えますので、素直にそちらを使ったほうがよろしいかと。
シフト演算とかでどうにかするにしても、結局そのマクロか何かをみて
どうやって値を取り出すかを調べなければなりませんし。


では。