gpt4 book ai didi

c++ - 在 osx 上将已安装的卷识别为 CD/DVD

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:45 25 4
gpt4 key购买 nike

当你在 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 以编程方式完成它,但这似乎是完成它的最快方法。

最佳答案

你从中得到最详细的信息

diskutil info /Volume/foo

特别是 Optical DriveOptical Media 条目,您只能为 CD/DVD 获得它们,因此它非常可靠。

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

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

关于c++ - 在 osx 上将已安装的卷识别为 CD/DVD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9129297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com