【问题标题】:Identify a mounted volume as a CD/DVD on osx在 osx 上将已安装的卷识别为 CD/DVD
【发布时间】: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 以编程方式执行此操作,但这似乎是完成它的最快方法。

【问题讨论】:

    标签: c++ c macos bash filesystems


    【解决方案1】:

    您可以从

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

    特别是查看 Optical DriveOptical Media 条目,这些条目只能用于 CD/DVD,因此非常可靠。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 2021-07-12
        • 2011-09-24
        • 2017-09-28
        • 1970-01-01
        • 2010-10-09
        • 2021-11-21
        • 2016-11-15
        • 2021-11-22
        相关资源
        最近更新 更多