errnoはシステムコールすると変わるとの認識なのでsystem関数での異常の場合には意味がないように思えるのですが?
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は、システムコールが最後に失敗した場合値が変わります。
但し、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も保持するのが
よいみたいですね。
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
回答ありがとうございました。
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()だと、シェルスクリプトでの実行ができるわけだ。
関係ないかな。
回答ありがとうございました。
一応system関数のエラでもerrnoも保持するのが
よいみたいですね。