在 osx 上将已安装的卷识别为 CD/DVD
Posted
技术标签:
【中文标题】在 osx 上将已安装的卷识别为 CD/DVD【英文标题】:Identify a mounted volume as a CD/DVD on osx 【发布时间】:2012-02-03 13:20:48 【问题描述】:当你在 osx 上挂载任何东西时,它会显示在 /Volumes/mountname 下
有什么方法可以使用命令行或 C/C++ 将卷识别为 CD/DVD ROM?
我目前最好的想法是这样的。
df | grep mountname
获取 /dev/diskNsM 路径
然后
drutil | grep /dev/diskN
查看路径挂载的设备是否为刻录机。
这可行,但我担心 CD/DVD 不是刻录机的情况。它还会出现在 drutil 的输出中吗? Mac 甚至还附带非刻录 CD/DVD 驱动器吗?
我更喜欢使用 C、C++ 或 Objective C 来做到这一点。
我已经用过了
const char *tmp = '/Volumes/mysterydrive';
statfs(tmp, &m);
if(m.f_flags & MNT_RDONLY)
read_only = true;
判断卷是否为只读, 但我看不到这个或任何相关的调用是否可以区分 CD/DVD 和只读安装的卷。
它只需要适用于 OSX 10.5 和更新版本。
有什么想法吗?
编辑:
使用
diskutil info /Volumes/mysterydrive
如果是 CD/DVD,我得到以下输出
Optical Drive Type: CD-ROM, CD-R, CD-RW, DVD-ROM, DVD-R, DVD-R DL, DVD-RW, DVD+R, DVD+R DL, DVD+RW
Optical Media Type: DVD-R
Optical Media Erasable: No
这就是我所需要的!
我稍后会考虑使用 IOKit 以编程方式执行此操作,但这似乎是完成它的最快方法。
【问题讨论】:
【参考方案1】:您可以从
获得最详细的信息diskutil info /Volume/foo
特别是查看 Optical Drive 和 Optical Media 条目,这些条目只能用于 CD/DVD,因此非常可靠。
不幸的是,diskutil 用来获取所有信息的框架是私有的,因此很难在 C 代码中复制它。
我没有深入研究其他选项,但是由于您可以从statfs
获取磁盘名称,因此理论上可以使用IOKit
来检查设备,您会看到IOCDMedia
或IODVDMedia
类,如果它是 CD/DVD 驱动器(即,如果您查找 IO*Media
类,BSD Name
属性的磁盘名称类似于 disk6
)
【讨论】:
【参考方案2】:Apple Developer Central 有一个名为 CDROMSample 的示例代码项目,该项目显示使用 IOKit
例程访问 CD-ROM 属性。这也可能让您开始处理 DVD。
【讨论】:
以上是关于在 osx 上将已安装的卷识别为 CD/DVD的主要内容,如果未能解决你的问题,请参考以下文章
在没有媒体 (CD/DVD) 的 Windows XP SP3 上安装 IIS