将已挂载的卷标识别为OSX上的CD/DVD

6

当你在OSX上挂载任何内容时,它会显示在/Volumes/mountname下。

是否有任何方法,使用命令行或C/C++来识别卷作为CD/DVD光盘?

我目前最好的想法是这样的。

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个回答

2
你可以从这里获得最详细的信息。
diskutil info /Volume/foo

特别是看一下光驱光盘介质的条目,这些只适用于CD/DVD,所以相当可靠。

不幸的是,diskutil使用的框架是私有的,因此在C代码中复制它将会很困难。

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


2

苹果开发中心有一个示例代码项目,称为CDROMSample,展示了如何使用IOKit例程来访问CD-ROM属性。这可能给你在处理DVD方面提供一些启示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接