0
這個問題說明了一切。如何從NSURL獲取代表可移動介質的塊設備?我想從/Volumes/MyDevice
得到的是類似/dev/disk2
。我想知道如果沒有使用IOKit框架,這是可能的!任何幫助表示讚賞。從NSURL獲取塊設備
這個問題說明了一切。如何從NSURL獲取代表可移動介質的塊設備?我想從/Volumes/MyDevice
得到的是類似/dev/disk2
。我想知道如果沒有使用IOKit框架,這是可能的!任何幫助表示讚賞。從NSURL獲取塊設備
DiskArbitration.framework將讓你有:
NSURL *volumeURL = [NSURL fileURLWithPath:@"/Volumes/YourDisk"];
DASessionRef session = DASessionCreate(kCFAllocatorDefault);
DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault,
session,
(__bridge CFURLRef)volumeURL);
NSDictionary *desc = CFBridgingRelease(DADiskCopyDescription(disk));
/* See DADisk.h for a list of available keys */
NSLog(@"%@", desc[(NSString *)kDADiskDescriptionMediaBSDNameKey]);
CFRelease(disk);
CFRelease(session);
正如statfs(2)
:
struct statfs s;
statfs([[volumeURL path] fileSystemRepresentation], &s);
printf("%s\n", s.f_mntfromname);
閱讀f_mntfromname'的'說明在手冊頁,它聽起來不像提問者想要的東西,但我試過了,它確實是一個設備路徑。 DiskArb代碼返回*略有不同:它不是完整的'/ dev/disk4'路徑,只是名稱'disk4'。 – 2013-04-26 20:34:50
啊,是的,這是真的。我在我的一些代碼中對/ dev前綴進行了硬編碼 - 考慮到它永遠存在(並且DiskManagement.framework似乎也這樣做),我認爲它足夠安全。我同意'f_mntfromname'被混淆記錄。 – jatoben 2013-04-26 21:13:40
DiskArb作爲私有框架在10.3,IIRC中引入;通過文件,它在10.4被公開。 – 2013-04-26 21:23:17