【问题标题】:Detection of framework usage on Mac system?在 Mac 系统上检测框架使用情况?
【发布时间】:2013-05-21 10:32:23
【问题描述】:

我想在 OSX 上开发示例框架,并要求该框架在任何时候都只能由单个客户端使用,我不知道如何实现这一点?他们是否有任何 API 来检测框架正在使用的天气?我们可以为此使用一些与文件相关的 API 吗?..我看到了一个 Windows 示例,他们在其中使用检测 dylib 的使用情况 遵循 API 的 ?? 创建文件映射W MapViewOfFile OpenFileMappingW

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

【问题讨论】:

  • 您需要维护一个系统范围的资源,该资源可用于保存对当前正在使用您的框架的应用程序的引用。这很复杂,因为您必须处理该 store 未正确清理的应用程序崩溃,并且几乎不可能击败当前标准的应用程序沙盒。如果不激怒你的用户,我会说这是很难实现的。

标签: macos cocoa frameworks dynamic-library


【解决方案1】:

您可以使用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];

【讨论】:

  • 谢谢,它在命令行中很好用,但是我如何在 cocoa lsof 中执行以下命令 | grep -i some.framework | wc -l i 使用 NSTask 并通过 "| grep -i some.framework | wc -l "这些作为参数 nut 给出错误,你知道如何实现吗??
猜你喜欢
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多