在osx上将已装入的卷标识为CD / DVD

时间:2012-02-03 13:20:49

标签: c++ c macos bash filesystems

当您在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稍后以编程方式执行此操作,但这似乎是完成此操作的最快方法。

2 个答案:

答案 0 :(得分:2)

您可以从

获取最详细的信息
diskutil info /Volume/foo

请参阅光盘光学媒体条目,这些条目只适用于CD / DVD,因此非常可靠。

不幸的是, diskutil 用于获取所有信息的框架是私有的,因此很难用C代码复制它。

我没有深入研究其他选项,但由于您可以从statfs获取磁盘名称,理论上可以使用IOKit检查设备,您会看到IOCDMediaIODVDMedia类如果是CD / DVD驱动器(即,如果查找IO*Media类,则BSD Name属性的磁盘名称为disk6

答案 1 :(得分:2)

Apple Developer Central有一个名为CDROMSample的示例代码项目,它显示使用IOKit例程来访问CD-ROM属性。这也可以帮助您开始处理DVD。