Обнаружение использования фреймворка в системе Mac?

Я хотел разработать образец фреймворка для OSX с требованием, чтобы в любой момент времени фреймворк использовался только одним клиентом, я не понимаю, как этого добиться? есть ли у них какие-либо API для определения того, используется ли фреймворк? Можем ли мы использовать какой-нибудь API, связанный с файлами, для этого?.. Я видел пример Windows, где они обнаруживали использование dylib с помощью следующих API?? CreateFileMappingW MapViewOfFile OpenFileMappingW

Кто-нибудь сталкивался с такими сценариями??

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];
Другие вопросы по тегам