IOKit和DiskArbitration框架可以告诉我关于mac上挂载卷的很多内容,但它们似乎无法区分HFS +和HFS标准卷。
对于HFS标准版和HFS +卷,IOKit / DA密钥Content
,DAVolumeKind
和DAMediaContent
始终为Apple_HFS和hfs。
diskutil和DiskUtility.app 可以分辨出来,但我似乎没有Apple开源。
P.S。 statfs(2)没有区分
答案 0 :(得分:7)
有两种方法可以做到这一点:
getattrlist()
检索卷的装载路径的ATTR_VOL_SIGNATURE
属性。 signature
字段。卷的签名是16位值,通常解释为两个ASCII字符。 HFS的签名是“BD”,HFS +是“H +”,区分大小写的HFS +是“HX”。
getattrlist
的手册页说该字段是u_int32,但FSVolumeInfo结构中的等效字段只有16位,所以我不确定32中的哪些16位用签名填充使用getattrlist
时,如果你想进入非碳路线,你可能只需要尝试一下。
答案 1 :(得分:1)
除了返回包含FSGetVolumeInfo()
和FSVolumeInfo
字段的signature
的Carbon filesystemID
之外,还有类-getFileSystemInfoForPath:
的Cocoa NSWorkspace
方法返回文件系统类型的字符串表示形式:例如,HFS +为hfs
,DOS FAT为msdos
。
答案 2 :(得分:0)
如果您尝试直接读取分区映射,那么您可能遇到的另一个问题是,历史上,HFS +卷嵌套在HFS包装器中。这样做是为了让任何试图使用旧操作系统的HFS +磁盘的人都会在驱动器上看到一个文件,说明其他所有数据的位置。