2013-05-21 21 views
2

我想在OSX上开发示例框架,并要求在任何时候该框架应该只由单个客户端使用,我不知道如何实现这一点?是他们的任何API检测天气框架正在使用?我可以使用一些文件相关的API为此?我已经看到了一个Windows示例,他们在哪里检测dylib的使用情况,使用 以下API的?? CreateFileMappingW MapViewOfFile OpenFileMappingW检测Mac系统上的框架使用情况?

有没有人遇到过这种情况?

+0

你需要保持它可以用来保存当前使用框架的应用程序引用一个全系统的资源。这很复杂,因为您必须处理应用程序崩溃,因为这些* store *没有正确清理,并且几乎不可能打败当前为标准的应用程序沙盒。我会说这是非常难以实现而不会激怒你的用户。 – trojanfoe

回答

2

您可以使用lsof命令。它会返回打开的文件列表。

如果没有任何选项,lsof会列出属于 所有活动进程的所有打开的文件。

NSTask* task = [[NSTask alloc] init]; 
NSPipe* pipe = [[NSPipe alloc] init]; 

NSArray* args = [NSArray arrayWithObjects: @"-c", @"lsof | grep -i some.framework | wc -l",nil]; 
[task setLaunchPath: @"/bin/sh"]; 
[task setArguments: args]; 
[task setStandardOutput: pipe]; 
[task setStandardError: pipe]; 
[task setStandardInput: [NSPipe pipe]]; 
[task launch];  
[task waitUntilExit]; 

NSFileHandle* file = [pipe fileHandleForReading]; 
NSString* result = [[NSString alloc] initWithData: [file readDataToEndOfFile] encoding: NSASCIIStringEncoding]; 
NSLog(@"%@",result); 
[result release]; 
[task release]; 
[pipe release]; 
+0

谢谢,它在命令行中很好用,但我如何在可可中执行以下命令: lsof | grep -i some.framework | wc -l 我用NSTask并且传递了“| grep -i some.framework | wc -l”这些作为参数nut给出错误,你知道如何实现这个吗? –

+0

检查更新ans –