2013-01-15 9 views
5

czy możliwe jest uzyskanie czasu logowania i wylogowania użytkownika w programie target-c? Mogę uzyskać identyfikator sesji, nazwę użytkownika, userUID, userIsActive i loginCompleted z funkcją CGSessionCopyCurrentDictionary, ale nie mogę uzyskać z tego czasu logowania i wylogowania, czy mogę?Objective-c - czas logowania i wylogowania użytkownika

Wiem, że mogę uzyskać informacje z konsoli.app, ale chciałbym umieścić go w programie.

Gdzie mogę znaleźć więcej informacji na ten temat? Nie można go znaleźć w podręczniku programisty Apple.

Dzięki!

Odpowiedz

5

Nie wiem, czy istnieje specjalna funkcja kakao, aby uzyskać czas logowania użytkownika/wylogowania.

Możesz jednak przeczytać historię logowania/wylogowania bezpośrednio, korzystając z getutxent_wtmp(). To, co robi „ostatni” narzędzie linii poleceń, jak można zobaczyć w kodzie źródłowym: http://www.opensource.apple.com/source/adv_cmds/adv_cmds-149/last/last.c

Wystarczy dać bardzo prosty przykład: Poniższy program wypisuje wszystkie czasy logowania/wylogowania do standardowego wyjścia:

#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

Dzięki, tego właśnie potrzebowałem! :) – Oggy

+0

Mam inne pytanie dotyczące tego. Czy możliwe jest uzyskanie tylko ostatniego pojedynczego loginu i nazwy użytkownika? – Oggy

+0

@Oggy: Z 'setutxent_wtmp (0)' wpisy logowania/wylogowania są zwracane w odwrotnej kolejności chronologicznej. Tak więc pierwsza nazwa logowania zwrócona przez 'getutxent_wtmp()' dla użytkownika jest ostatnim loginem. –

Powiązane problemy