Обнаружение использования фреймворка в системе 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];