2012-02-03 27 views
6

當你在OSX上安裝任何東西它顯示了在/ Volumes/mountname確定安裝的卷作爲CD/DVD上OSX

有什麼辦法,使用命令行或C/C++來標識卷作爲CD/DVD光盤?

我目前最好的辦法是這樣的。

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編程以後去做,但是這似乎是把它做的最快方式。

回答

2

您從

diskutil info /Volume/foo 

獲得最詳細的信息,特別是看到光驅光學介質條目,你只得到了CD/DVD的所以它是非常可靠的。

不幸的磁盤工具使用獲取所有的信息框架是私人的,所以這將是難以複製它的C代碼。

我沒有深入挖掘其他的選擇,但因爲你可以從statfs獲得磁盤的名稱也可能是在理論上可能使用IOKit檢查出的設備,你會看到IOCDMediaIODVDMedia類,如果它是一個CD/DVD驅動器(即如果你看IO*MediaBSD Name酒店磁盤名稱,如disk6

2

蘋果開發者中心有一個名爲CDROMSample示例代碼項目,它顯示了使用IOKit程序來訪問CD-ROM的性能。這也可以讓你開始處理DVD。