- ベストアンサー
UNIX-Cのsystem関数でエラーを捕捉したい
やりたいことは以下のことです。 ◎ユーザーはguestです。 unixのコマンドラインから、 dateコマンドで以下のように入力すると、 root権限がない場合はエラーが返って来ます。 guest@host>date 0516201006 (2006年5月16日20時10分に時刻を設定) root権限がありません。 bindが失敗します。 ◎ユーザーはguestのままです。 これをCプログラムの中で、 system("date 0516201006"); とやってもエラーはコマンドラインの方に表示されて、 プログラムの中では捕まえることが出来ません。 system命令ではなくて、popen命令を使用しても構いません。 プログラムの中で捕まえる方法を知りたいです。 errno表示でもperrorでもダメでした。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
趣旨がちゃんとつかめてないのかもしれませんが… system("date 0516201006");はエラーを起こす例として書かれているのですよね。 system()の終了コードはWEXITSTATUS()でgetすることができます。標準エラー出力は、/dev/nullにリダイレクトすれば表示されません。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <stdio.h> #include <sys/wait.h> #include <stdlib.h> int main(void) { int ret,stat; ret = system("date 0516201006 2>/dev/null"); stat = WEXITSTATUS(ret); printf("ret = %d, stat = %d\n", ret, stat); return 0; }
その他の回答 (1)
- a-saitoh
- ベストアンサー率30% (524/1722)
Cで時刻設定したいのなら、dateコマンドを使うのではなくgettimefdayシステムコールを使う方が良いと思いますよ。エラーの把握も楽だし。
お礼
ありがとうございました。 参考にさせて頂きます。 今回の問題点は、時刻を設定したいのではなく、あくまでも、system関数の戻り値を見たいということです。
お礼
ありがとうございました! system関数の戻り値を調べたかったので、 この回答を期待しておりました。 ありがとうございました!