Macos 以编程方式检索OS X磁盘分区UUID

Macos 以编程方式检索OS X磁盘分区UUID,macos,uuid,volume,diskarbitration,Macos,Uuid,Volume,Diskarbitration,我有一个分区的路径。如何在不使用终端命令的情况下以编程方式检索该分区的UUID?举个例子会更有帮助。$diskutil info/| grep UUID 从C运行这个程序留给读者作为练习 如果需要根目录以外的分区,可以指定装载点或设备名称(例如disk0s2)来代替/您可以使用磁盘仲裁框架()。Chris Suter对此也做了一个很好的总结 您可以使用kdadiskDescriptionMediaudKey获取UUID。Aaron Burghardt在这个邮件列表中描述得很好。以下是该链接的一段

我有一个分区的路径。如何在不使用终端命令的情况下以编程方式检索该分区的UUID?举个例子会更有帮助。

$diskutil info/| grep UUID

从C运行这个程序留给读者作为练习


如果需要根目录以外的分区,可以指定装载点或设备名称(例如disk0s2)来代替
/

您可以使用磁盘仲裁框架()。Chris Suter对此也做了一个很好的总结

您可以使用kdadiskDescriptionMediaudKey获取UUID。Aaron Burghardt在这个邮件列表中描述得很好。以下是该链接的一段引文:

拥有DADisk后,使用DADiskCopyDescription获取属性字典,您将在其中 查找具有KDADiskDescriptionMediaudKey键的UUID(请参阅DADisk.h以了解可能存在的其他键) 利息)。注意,DADisk是IOMedia对象和描述字典的包装器 直接对应于IOMedia对象中的属性。此外,CFShow()对于打印 将描述字典添加到控制台


我认为最简单的方法是使用polkit

从下载DiskWatcher.h和.m

将其添加到项目中(如果使用ARC,则添加-fno objc ARC标志)

添加DiskArbiration框架 你可以用

+ (NSString*) diskIdentifierForPath:(NSString*)path;

NSString *UUID1 = [DiskWatcher diskIdentifierForPath:@"/Volumes/Backup900GB"];

这可能对你有帮助。(@iammilind:那是MAC,一个48位的网络地址。这似乎是Apple Mac OSX。你的问题是分区,但它标记了卷。分区的UUID与该分区中“卷”的UUID不同。例如,使用@user57368:
$diskutil info/Volumes/ground | grep UUID
`Volume UUID:e1eacc65d-47A2-3AB3-BCE5-BA25FD2C6A30``磁盘/分区UUID:E24032E3-DC36-470E-86B9-C9664026F8EC`感谢您的终端命令。你能告诉我如何(有办法)只使用C或C++而不使用终端命令吗?