OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

system関数のエラー検出

  • すぐに回答を!
  • 質問No.120071
  • 閲覧数2105
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

UNIXのmanで調べたところ、system関数(コマンド)はエラー時、-1をかえし、errnoに"EAGAIN","EINTR","ENOMEN"を代入するようなのですが、
実際にプログラムにくみこんでみると、1を返しているようです。
(systemで実行するコマンド名をわざと間違えて実行しています。)
これでは、systemで実行しようとしているコマンドが1を返しているのか、systemでエラーが起きているのか判断できません。
どのように判定すればよいのでしょうか。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル9

ベストアンサー率 71% (59/82)

atonさんの仰る通り、shのステータスでしょう。
Solarisのmanページには、

"If the fork() or exec() fails, system() returns
a value of -1 and sets errno."

とありますし、Linuxでは、

”execve() が /bin/sh を呼び出すのに失敗した時には 127 を、
別のエラーがあった時には -1 を、それ以外の時はコマンドの
返り値を返す。”

とあります。

このように、system()は返り値1に特別な意味を
もたせてないですから、system()から1が返った
ということは、shか或はshが呼び出したコマンドから
1が返ったということでしょう。

問題は、shはCommand not foundなどの理由で失敗した時に
1を返しますが、他の大部分のbuilt-inコマンドも失敗した時には
1を返す、ということです。このため、shで失敗したのか、
shから呼ばれたコマンドで失敗したのかは区別がつきません。

shもその他のコマンドも成功したら0を返すので、
「0 が成功でそれ以外は失敗として扱う」というのが
正解だと私も思います。
お礼コメント
noname#794

回答ありがとうございました。
投稿日時 - 2001-08-24 18:35:36
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 47% (160/334)

 私も調べてみましたが,いまいちはっきりわからなかったので,以下想像です。  manの記述は,fork()またはexec()で失敗したときのみ-1を返すというようにも読めるので,この場合はshの終了ステータスが返ってきてるのではないでしょうか? shのmanページでは,0以外は何らかのエラーということのようです。  あるいはsystem()と同じライブラリー(stdlib.h)に定義されている EXI ...続きを読む
 私も調べてみましたが,いまいちはっきりわからなかったので,以下想像です。
 manの記述は,fork()またはexec()で失敗したときのみ-1を返すというようにも読めるので,この場合はshの終了ステータスが返ってきてるのではないでしょうか? shのmanページでは,0以外は何らかのエラーということのようです。
 あるいはsystem()と同じライブラリー(stdlib.h)に定義されている EXIT_FAILURE が返ってきているのかもしれません。ちなみにこの場合もうまくいったことを表すと思われる EXIT_SUCCESS の値は0です。
 というわけで,あまりお役に立ちそうもない情報ですが,いずれにせよ 0 が成功でそれ以外は失敗として扱うことにしてみてはいかがでしょうか。
お礼コメント
noname#794

回答ありがとうございました。
投稿日時 - 2001-08-24 18:36:04


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ