IOKit和DiskArbitration框架可以告诉我很多关于mac上挂载卷的事情,但它们似乎无法区分HFS +和HFS标准卷.
由于IOKit/DA键Content
,DAVolumeKind
并且DAMediaContent
总是Apple_HFS和两个HFS标准和HFS +卷HFS.
diskutil和DiskUtility.app 可以区分,但我似乎没有Apple开源.
ps statfs(2)没有区分
有两种方法可以做到这一点:
使用getattrlist()
检索ATTR_VOL_SIGNATURE
的卷的安装路径属性.
使用Carbon调用FSGetVolumeInfo()并查看signature
返回的struct 的字段.
卷的签名是16位值,通常解释为两个ASCII字符.HFS的签名是"BD",HFS +是"H +",区分大小写的HFS +是"HX".
getattrlist
说该字段的手册页是一个u_int32,但FSVolumeInfo结构中的等效字段只有16位,所以我不确定使用时签名中哪些32位填充了32位getattrlist
,你可能会有如果你想进入非碳路线,只是尝试一下.
getattrlist手册页
HFS Plus卷格式参考
FSGetVolumeInfo