2

是否存在允许我的 C++ 代码在 Mac OS X 上使用 hdiutil 的系统调用或库。我的代码需要挂载可用的 .dmg 文件,然后操作其中的内容。

4

3 回答 3

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 表示成功。

于 2010-01-05T19:17:43.110 回答
3

hdiutil使用 DiskImages.framework;不幸的是,该框架是私有的(未记录,没有标题),但如果您喜欢冒险,您可以尝试使用它

于 2010-01-05T20:10:31.563 回答
1

hdiutil有一个-plist参数导致其将其输出格式化为标准 OS X plist。有关处理 hdiutil 输出的信息,请参阅此内容;因为您可能需要稍微检查一下输出才能找到您需要的内容,所以最初使用类似python. 然后在此处查看有关在 C++ 中解析 plist 的一些建议。

于 2010-01-05T22:18:49.440 回答