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稍后以编程方式执行此操作,但这似乎是完成此操作的最快方法.
您可以获得最详细的信息
diskutil info /Volume/foo
Run Code Online (Sandbox Code Playgroud)
特别是请参阅仅适用于 CD/DVD 的光驱和光学介质条目,因此它非常可靠。
不幸的是, diskutil用于获取所有这些信息的框架是私有的,因此很难在 C 代码中复制它。
我没有深入研究其他选项,但由于您可以从中获取磁盘名称,statfs理论上可以用于IOKit检查设备,您将看到IOCDMedia 或IODVDMedia分类它是否是 CD/DVD 驱动器(即,如果您寻找属性具有磁盘名称的IO*Media类,例如)BSD Namedisk6