プロが教える店舗&オフィスのセキュリティ対策術

やりたいことは以下のことです。

◎ユーザーはguestです。

unixのコマンドラインから、
dateコマンドで以下のように入力すると、
root権限がない場合はエラーが返って来ます。

guest@host>date 0516201006
(2006年5月16日20時10分に時刻を設定)
root権限がありません。
bindが失敗します。

◎ユーザーはguestのままです。
これをCプログラムの中で、
system("date 0516201006");
とやってもエラーはコマンドラインの方に表示されて、
プログラムの中では捕まえることが出来ません。

system命令ではなくて、popen命令を使用しても構いません。

プログラムの中で捕まえる方法を知りたいです。
errno表示でもperrorでもダメでした。

よろしくお願いいたします。

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

ありがとうございました!
system関数の戻り値を調べたかったので、
この回答を期待しておりました。
ありがとうございました!

お礼日時:2006/05/18 00:21

Cで時刻設定したいのなら、dateコマンドを使うのではなくgettimefdayシステムコールを使う方が良いと思いますよ。

エラーの把握も楽だし。
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考にさせて頂きます。
今回の問題点は、時刻を設定したいのではなく、あくまでも、system関数の戻り値を見たいということです。

お礼日時:2006/05/18 00:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!