2010-12-14 78 views
2

J'essaie de vérifier l'heure depuis la dernière connexion dans mon application Cocoa. Je voudrais le faire sans avoir à faire quelque chose comme ceci:Version Objective C de la commande "finger" unix

NSTask *task; 
task = [[NSTask alloc] init]; 
[task setLaunchPath: @"/usr/bin/finger"]; 

NSArray *arguments; 
arguments = [NSArray arrayWithObject: NSUserName()]; 
[task setArguments: arguments]; 

NSPipe *pipe; 
pipe = [NSPipe pipe]; 
[task setStandardOutput: pipe]; 

NSFileHandle *file; 
file = [pipe fileHandleForReading]; 

[task launch]; 

NSData *data; 
data = [file readDataToEndOfFile]; 

NSString *stringData = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
NSLog (@"%@", stringData); 

Par exemple, la commande Unix whoami a le NSUserName Objectif C équivalent.

+0

Ce n'est pas vraiment une solution à votre problème, b Je vais noter que le doigt a sur le protocole de réseau le plus simple au monde. Telnet sur le port 79, tapez votre nom de connexion et appuyez sur Entrée. Donc, vous pouvez éviter de forger, au moins. (http://tools.ietf.org/html/rfc1288) – Ken

Répondre

6

C'était une question vraiment intéressante! Merci d'avoir posé la question. :)

Quant à la réponse, je suis allé trouver la source finger et avec elle avec les éléments suivants:

#import <utmpx.h> 

struct utmpx *user; 
setutxent(); 
while ((user = getutxent()) != NULL) { 
    if (user->ut_type == USER_PROCESS) { 
     time_t loggedIn = user->ut_tv.tv_sec; 
     NSDate * d = [NSDate dateWithTimeIntervalSince1970:loggedIn]; 
     NSLog(@"%s logged in at %@", user->ut_user, d); 
    } 
} 
endutxent(); 

Sur mon ordinateur, ce Logs:

dave logged in at 2010-12-06 09:59:13 -0800 
dave logged in at 2010-12-13 19:14:20 -0800 

Cette correspond à la sortie de finger dave dans le terminal:

Login: dave      Name: Dave DeLong 
Directory: /Users/dave     Shell: /bin/bash 
On since Mon Dec 6 09:59 (PST) on console, idle 7 days 9:18 (messages off) 
On since Mon Dec 13 19:14 (PST) on ttys000 
On since Thu Dec 9 17:21 (PST) on ttys001 (messages off) 
+0

Grande réponse :) – d11wtq

+0

génial! Merci :) – David

0

Vous devrez probablement lire cette information à partir des fichiers système où cela est stocké. Peut-être un fichier 'utmp' sur unix.

Après tout, c'est ce que fait 'finger'.