macos - 使用来自 OS X 的 IOKit 框架的卷 UUID

标签 macos uuid volume iokit

我想获取/枚举安装在我的 OS X 系统上的卷的 UUID。 我知道我可以使用 diskutil 命令来获取它,如下所示。

$ diskutil info / |grep "Volume UUID"
   Volume UUID:              039B9653-52AA-34F3-AF4A-854FA47C811A

但是,我想使用 IOKit 框架以可编程的方式(也许)实现它。 如果有人能告诉我该怎么做,那将非常有帮助。

非常感谢您的提前帮助!

最佳答案

感谢@pmdj 的回答,我可以使用以下代码片段解决我的问题。

void printUUID()
{
    DADiskRef disk;
    CFDictionaryRef descDict;

    DASessionRef session = DASessionCreate(NULL);

    std::string mountPoint = "/";
    CFURLRef url = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8 *) mountPoint.c_str(), mountPoint.length(), TRUE);
    disk = DADiskCreateFromVolumePath(NULL, session, url);
    if (disk) {
        descDict = DADiskCopyDescription(disk);
        if (descDict) {
            CFTypeRef value = (CFTypeRef)CFDictionaryGetValue(descDict,
                                                              CFSTR("DAVolumeUUID"));
            CFStringRef strValue = CFStringCreateWithFormat(NULL, NULL,
                                                            CFSTR("%@"), value);
            printf("%s\n" ,CFStringGetCStringPtr(strValue, kCFStringEncodingMacRoman));
            CFRelease(strValue);
            CFRelease(descDict);
        }
        CFRelease(disk);
    }

    CFRelease(url);
    CFRelease(session);
}

关于macos - 使用来自 OS X 的 IOKit 框架的卷 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851066/

相关文章:

c++ - CPU 光线转换

android - 手机锁定时收听音量按钮android

java - launchd:管理 Java Jar

c++ - XCode 4.3 中没有调用 'sqrt' 的匹配函数

python - django.db.utils.OperationalError : (1046, 'No database selected' )

c - 从 C 或 Delphi 从 Win32 获取 BIOS UUID

macos - Homebrew 软件更新失败 : "Please, commit your changes or stash them before you can merge"

java - 如何为hibernate注释生成的UUID添加前缀?

java - 如何减少使用 randomUUID( ) 生成的 UUID 的长度

amazon-web-services - 是否安装了 EBS 卷?在哪里?