2013-01-15 69 views
5

是否可以在objective-c程序中獲取用戶的登錄和註銷時間?我可以通過CGSessionCopyCurrentDictionary函數獲取會話ID,用戶名,userUID,userIsActive和loginCompleted,但是我無法從中獲取登錄和註銷時間,可以嗎?Objective-c - 用戶的登錄和註銷時間

我知道我可以從console.app獲取信息,但我想把它放在一個程序中。

我在哪裏尋找更多的信息?在Apple的開發指南中找不到它。

謝謝!

回答

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()返回的第一個登錄條目是最後一次登錄。 –