Интерфейс C++ для hdiutil на Mac
Существует ли системный вызов или библиотека, которые позволили бы моему коду C++ использовать hdiutil в Mac OS X. Мой код должен монтировать доступный файл.dmg и затем манипулировать тем, что внутри.
3 ответа
Если вы можете использовать Objective-C++, вы можете использовать NSTask для запуска инструментов командной строки:
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/hdiutil"];
[task setArguments:
[NSArray arrayWithObjects: @"attach", @"/path/to/dmg/file", nil]];
[task launch];
[task waitUntilExit];
if (0 != [task terminationStatus])
NSLog(@"Mount failed.");
[task release];
Если вам нужно использовать "простой" C++, вы можете использовать system():
if (0 != system("/usr/bin/hdiutil attach /path/to/dmg/file"))
puts("Mount failed.");
или fork()/exec().
Вам нужно будет перепроверить hdiutil
на самом деле возвращает 0 для успеха или нет.
hdiutil
использует DiskImages.framework; к сожалению, фреймворк является приватным (без документов, без заголовков), но если вы чувствуете себя авантюрным, вы можете попытаться использовать его в любом случае.
hdiutil
имеет -plist
аргумент, который заставляет его форматировать свой вывод как стандартный OS X plist. Смотрите это для информации об обработке вывода из hdiutil; потому что вам, вероятно, придется немного изучить вывод, чтобы найти то, что вам нужно, может быть легко сделать это изначально с чем-то вроде python
, Тогда посмотрите здесь для некоторых предложений по синтаксическому анализу списков в C++.