区分HFS +和HFS标准卷

Rhy*_*man 1 macos iokit diskarbitration

IOKit和DiskArbitration框架可以告诉我很多关于mac上挂载卷的事情,但它们似乎无法区分HFS +和HFS标准卷.

由于IOKit/DA键Content,DAVolumeKind并且DAMediaContent总是Apple_HFS和两个HFS标准和HFS +卷HFS.

diskutil和DiskUtility.app 可以区分,但我似乎没有Apple开源.

ps statfs(2)没有区分

Bri*_*ter 7

有两种方法可以做到这一点:

  1. 使用getattrlist()检索ATTR_VOL_SIGNATURE的卷的安装路径属性.
  2. 使用Carbon调用FSGetVolumeInfo()并查看signature返回的struct 的字段.

卷的签名是16位值,通常解释为两个ASCII字符.HFS的签名是"BD",HFS +是"H +",区分大小写的HFS +是"HX".

getattrlist说该字段的手册页是一个u_int32,但FSVolumeInfo结构中的等效字段只有16位,所以我不确定使用时签名中哪些32位填充了32位getattrlist,你可能会有如果你想进入非碳路线,只是尝试一下.

getattrlist手册页

HFS Plus卷格式参考

FSGetVolumeInfo