Linux上でC言語によるsystem関数使用時にエラーハンドリングでerrnoは参照する意味があるのでしょうか?

errnoはシステムコールすると変わるとの認識なのでsystem関数での異常の場合には意味がないように思えるのですが?

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/10/26 21:54:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント400pt

system関数の仕様上は、無意味と思います。

errnoは、システムコールが最後に失敗した場合値が変わります。

但し、system関数が内部で呼び出している関数が

execve/waitのエラーである事が想像できるので、

systemが正常終了しなかった場合のエラー原因を

高い確率で推定する事が可能となる。


errno =0;

rc = system(xxxx);

system関数

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

id:root00

回答ありがとうございました。

一応system関数のエラでもerrnoも保持するのが

よいみたいですね。

2006/10/22 10:48:09

その他の回答2件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155ここでベストアンサー

ポイント400pt

system関数の仕様上は、無意味と思います。

errnoは、システムコールが最後に失敗した場合値が変わります。

但し、system関数が内部で呼び出している関数が

execve/waitのエラーである事が想像できるので、

systemが正常終了しなかった場合のエラー原因を

高い確率で推定する事が可能となる。


errno =0;

rc = system(xxxx);

system関数

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

id:root00

回答ありがとうございました。

一応system関数のエラでもerrnoも保持するのが

よいみたいですね。

2006/10/22 10:48:09
id:zifree No.2

回答回数175ベストアンサー獲得回数6

ポイント50pt

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

system関数が失敗した時、errnoに値が入る旨の記述はmanにはありません。

エラーハンドリングを行う場合はsystemの戻り値で-1が返ってくるかどうかを見れば十分かと思います。

> errnoはシステムコールすると変わるとの認識なので

errnoはシステムコールだけでなくいくつかのライブラリ関数により変更されることもあります。ただし、仰るとおりsystem関数での異常の場合は見る意味がありません。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/errno.3.html

id:root00

回答ありがとうございました。

2006/10/22 10:48:14
id:ma-kanoh No.3

回答回数155ベストアンサー獲得回数4

ポイント200pt

http://www.rescue.ne.jp/CGI-BBS/cgi/perl/20011128225046.shtml

そもそもsystem()関数は「システムコール」ではないのでerrnoが

無意味でしょうね。execなら意味があるのか?とは思いますが。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/execve.2.html

execve()だと、シェルスクリプトでの実行ができるわけだ。

関係ないかな。

  • id:furutanian
    本質門と関係なくてすみません。
    http://q.hatena.ne.jp/1162811274
    上記の質問について追加質問を頂いてますが回答できません。
    コメントか、回答回数を増やしてくれませんか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません