2013-06-11 3 views
0

이 코드에 의해하는 OS X 디스크 파티션의 UUID를 검색 할 수 있습니다OS X에서 루트 디스크 파티션의 UUID를 프로그래밍 방식으로 검색하는 방법은 무엇입니까?

코드 위
void PrintUUID() 
{ 
    DADiskRef disk; 
    CFDictionaryRef descDict; 
    DASessionRef session = DASessionCreate(NULL); 
    if (session) { 
     disk = DADiskCreateFromBSDName(NULL, session, "/dev/disk0s2"); 
     if (disk) { 
      descDict = DADiskCopyDescription(disk); 
      if (descDict) { 
       CFTypeRef value = (CFTypeRef)CFDictionaryGetValue(descDict, 
        CFSTR("DAVolumeUUID")); 
       CFStringRef strValue = CFStringCreateWithFormat(NULL, NULL, 
        CFSTR("%@"), value); 
       print(strVal); <------------- here is the output 
       CFRelease(strValue); 
       CFRelease(descDict); 
      } 
      CFRelease(disk); 
     } 
    } 
} 

이 DISK0의 UUID를 검색, 내가 루트 디스크의 UUID 검색 할 (마운트를 점 = /), 내가 사용하는 경우 "/ "대신"/ dev/disk0s2 "이면 DADiskCopyDescription이 NULL을 리턴합니다. 또한 내가이 명령으로 터미널에서 작업을 수행 할 수 있습니다 알고

diskutil info/

짧게는 어떻게 루트 디스크의 BSD 이름을 검색 할 수 있습니다? (DADiskCreateFromBSDName에서 사용)

누구나 아이디어가 있습니까? 감사합니다. .

+0

"루트 디스크"= "루트 파일 시스템". – trojanfoe

답변

5

사용 DADiskCreateFromVolumePath 대신 DADiskCreateFromBSDName :

char *mountPoint = "/"; 
CFURLRef url = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8 *)mountPoint, strlen(mountPoint), TRUE); 
disk = DADiskCreateFromVolumePath(NULL, session, url); 
CFRelease(url); 
1

DADiskCreateFromVolumePath은 OS 10.7에 포함 된 이상, 그래서 당신은 OS 10.4 이상 (나 같은!) 유일한 옵션에처럼 오래된 플랫폼을 지원해야하는 경우 statfs를 사용하여 posix 이름에서 BSD 이름을 생성하십시오. 따라서 전체 함수는 다음과 같이됩니다.

+0

감사합니다. 귀하의 솔루션을 확인/테스트 할 것입니다. –