人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linux上でC言語によるsystem関数使用時にエラーハンドリングでerrnoは参照する意味があるのでしょうか?
errnoはシステムコールすると変わるとの認識なのでsystem関数での異常の場合には意味がないように思えるのですが?

●質問者: root00
●カテゴリ:コンピュータ
✍キーワード:C言語 Linux エラー システムコール ハンドリング
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kurukuru-neko
●400ポイント ベストアンサー

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

◎質問者からの返答

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

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

よいみたいですね。


2 ● zifree
●50ポイント

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

◎質問者からの返答

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


3 ● ma-kanoh
●200ポイント

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()だと、シェルスクリプトでの実行ができるわけだ。

関係ないかな。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ