簡體   English   中英

在osx上將已裝入的卷標識為CD / DVD

[英]Identify a mounted volume as a CD/DVD on osx

當您在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 ++或目標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

特別是請參閱光盤驅動器光學介質條目,您只能獲得CD / DVD,因此非常可靠。

不幸的是, diskutil用於獲取所有信息的框架是私有的,因此很難在C代碼中復制它。

我沒有深入研究其他選項,但由於你可以從statfs獲得磁盤名稱,理論上可以使用IOKit檢查設備,如果它是CD / DVD你會看到IOCDMediaIODVDMedia類驅動器(即如果您查找IO*Media類,則BSD Name屬性的磁盤名稱類似於disk6

Apple Developer Central有一個名為CDROMSample的示例代碼項目,它顯示了使用IOKit例程來訪問CD-ROM屬性。 這可能會讓您開始處理DVD。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM