Интерфейс 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++.

Другие вопросы по тегам