2013-01-15 35 views
5

目的のCプログラムでユーザーのログインとログアウト時刻を取得することは可能ですか?セッションID、ユーザー名、userUID、userIsActive、loginCompletedをCGSessionCopyCurrentDictionary関数で取得できますが、ログインとログアウトに時間がかかりません。Objective-c - ユーザーのログインとログアウト時刻

私はconsole.appから情報を得ることができますが、私はプログラムに入れたいと思います。

ここで私はそれに関する詳細情報を探しますか?アップルの開発ガイドで見つけることができません。

ありがとうございます!

答えて

5

ユーザーログイン/ログアウト時間を取得するための特別なココア関数があるかどうかわかりません。

しかし、getutxent_wtmp()を使用してログイン/ログアウトの履歴を直接読むことができます。 http://www.opensource.apple.com/source/adv_cmds/adv_cmds-149/last/last.c

だけで非常に簡単な例を与えるために:次のプログラムは、標準出力にすべてのログイン/ログアウト時刻を表示します:

をこれは、ソースコードに見られるように、「最後の」コマンドラインツールは、何をするかです
#include <stdio.h> 
#include <utmpx.h> 

int main(int argc, const char * argv[]) 
{ 
    struct utmpx *bp; 
    char *ct; 

    setutxent_wtmp(0); // 0 = reverse chronological order 
    while ((bp = getutxent_wtmp()) != NULL) { 
     switch (bp->ut_type) { 
      case USER_PROCESS: 
       ct = ctime(&bp->ut_tv.tv_sec); 
       printf("%s login %s", bp->ut_user, ct); 
       break; 
      case DEAD_PROCESS: 
       ct = ctime(&bp->ut_tv.tv_sec); 
       printf("%s logout %s", bp->ut_user, ct); 
       break; 

      default: 
       break; 
     } 
    }; 
    endutxent_wtmp(); 

    return 0; 
} 
+0

ありがとう、それは私が必要なものです! :) – Oggy

+0

私はこれに関する別の質問があります。最後の単一ユーザーのログイン名と時間だけを取得することは可能ですか? – Oggy

+0

@Oggy: 'setutxent_wtmp(0)'を使うと、ログイン/ログアウトのエントリが時系列の逆順で返されます。したがって、ユーザのために 'getutxent_wtmp()'によって返された最初のログインエントリが最後のログインです。 –