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

Kim*_*meh 6 c c++ filesystems macos bash

当您在osx上挂载任何内容时,它会显示在/ Volumes/mountname下

有没有办法,使用命令行或C/C++将卷识别为CD/DVD ROM?

我目前的最佳想法是这样的.

df | grep mountname 
Run Code Online (Sandbox Code Playgroud)

获取/ dev/diskNsM路径

然后

drutil | grep /dev/diskN 
Run Code Online (Sandbox Code Playgroud)

查看路径安装设备是否是刻录机.

这有效,但我担心CD/DVD不是刻录机的情况.它还会出现在drutil的输出中吗?Mac是否配备了非刻录CD/DVD驱动器?

此外,我更喜欢使用C,C++或目标C来做到这一点.

我已经用过

const char *tmp = '/Volumes/mysterydrive';
statfs(tmp, &m);
if(m.f_flags & MNT_RDONLY)
{
    read_only = true;
}
Run Code Online (Sandbox Code Playgroud)

确定卷是否只读,但我无法看到这个或任何相关的调用是否可以区分CD/DVD和只读安装的卷.

它只需要适用于OSX 10.5及更新版本.

有任何想法吗?

编辑:

运用

  diskutil info /Volumes/mysterydrive
Run Code Online (Sandbox Code Playgroud)

如果是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
Run Code Online (Sandbox Code Playgroud)

这就是我所需要的!

我将考虑使用IOKit稍后以编程方式执行此操作,但这似乎是完成此操作的最快方法.

Sim*_*nek 2

您可以获得最详细的信息

diskutil info /Volume/foo
Run Code Online (Sandbox Code Playgroud)

特别是请参阅仅适用于 CD/DVD 的光驱光学介质条目,因此它非常可靠。

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

我没有深入研究其他选项,但由于您可以从中获取磁盘名称,statfs理论上可以用于IOKit检查设备,您将看到IOCDMediaIODVDMedia分类它是否是 CD/DVD 驱动器(即,如果您寻找属性具有磁盘名称的IO*Media类,例如)BSD Namedisk6