2012-02-03 31 views
6

Khi bạn gắn kết bất cứ điều gì trên OSX nó xuất hiện dưới/Volumes/mountnameXác định một khối lượng lắp dưới dạng đĩa CD/DVD trên OSX

Có cách nào, bằng cách sử dụng dòng lệnh hoặc C/C++ để xác định khối lượng như một CD/DVD rom?

Ý tưởng hay nhất hiện tại của tôi giống như thế này.

df | grep mountname 

để có được/dev/diskNsM đường

và sau đó

drutil | grep /dev/diskN 

để xem nếu đường dần đến device gắn là burner.

Tác phẩm này, nhưng tôi lo ngại về trường hợp đĩa CD/DVD không phải là đầu ghi. Nó vẫn sẽ hiển thị trong đầu ra của drutil? Mac thậm chí có đi kèm với ổ CD/DVD không ghi đĩa không?

Ngoài ra tôi muốn sử dụng C, C++ hoặc C mục tiêu để thực hiện việc này.

tôi đã sử dụng

const char *tmp = '/Volumes/mysterydrive'; 
statfs(tmp, &m); 
if(m.f_flags & MNT_RDONLY) 
{ 
    read_only = true; 
} 

để xác định nếu khối lượng là readonly, nhưng tôi không thể nhìn thấy nếu cuộc gọi liên quan này hoặc bất kỳ có thể phân biệt giữa một đĩa CD/DVD và một khối lượng readonly gắn kết.

Chỉ cần làm việc cho OSX 10.5 trở lên.

Bất kỳ ý tưởng nào?

EDIT:

Sử dụng

diskutil info /Volumes/mysterydrive 

tôi đã cho kết quả sau nếu nó một đĩa 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 

Và đó là tất cả tôi cần!

Tôi sẽ xem xét sử dụng IOKit để thực hiện chương trình sau, nhưng đây có vẻ là cách nhanh nhất để hoàn thành công việc.

Trả lời

2

Bạn nhận được các thông tin chi tiết nhất từ ​​

diskutil info /Volume/foo 

Đặc biệt thấy Ổ quangOptical Media mục mà bạn chỉ nhận được cho đĩa CD/DVD để nó là khá đáng tin cậy.

Thật không may là các khung mà diskutil sử dụng để nhận tất cả thông tin đó là riêng tư, do đó sẽ rất khó để sao chép nó trong mã C.

Tôi không đào sâu hơn vào lựa chọn khác, nhưng kể từ khi bạn có thể lấy tên đĩa từ statfs nó có thể là về mặt lý thuyết có thể sử dụng IOKit kiểm tra thiết bị và bạn sẽ thấy IOCDMedia hoặc IODVDMedia lớp nếu nó là một ổ đĩa CD/DVD (tức lànếu bạn tìm kiếm IO*Media lớp BSD Name bất động sản có tên đĩa như disk6)

2

của Apple Developer Trung ương có dự án mẫu mã được gọi là CDROMSample cho thấy sử dụng IOKit thói quen để truy cập các thuộc tính đĩa CD-ROM. Điều này cũng có thể giúp bạn bắt đầu xử lý DVD.

Các vấn đề liên quan