2012-02-03 11 views
6

Al montar nada en OSX que aparece bajo/Volumes/mountnameidentificar un volumen montado como un CD/DVD en OSX

¿Hay alguna manera, utilizando la línea de comandos o C/C++ para identificar el volumen como una CD/DVD rom?

Mi mejor idea actual es algo como esto.

df | grep mountname 

para obtener el dev/diskNsM ruta/

y luego

drutil | grep /dev/diskN 

para ver si la ruta del dispositivo montado es el quemador.

Esto funciona, pero me preocupa el caso en que el CD/DVD no es un quemador. ¿Seguirá apareciendo en la salida de drutil? ¿Las computadoras incluso vienen con una unidad de CD/DVD sin grabadora?

También preferiría usar C, C++ u objetivo C para hacer esto.

ya utilizo

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

para determinar si el volumen es de sólo lectura, pero no puedo ver si este o cualquier llamada relacionada puede distinguir entre un CD/DVD y un volumen montado de sólo lectura.

Solo debería funcionar para OSX 10.5 y posterior.

¿Alguna idea?

EDIT:

Usando

diskutil info /Volumes/mysterydrive 

me dieron el siguiente resultado si es un 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 

Y eso es todo lo que necesito!

Analizaré el uso de IOKit para hacerlo programáticamente más tarde, pero esta parece ser la forma más rápida de hacerlo.

Respuesta

2

a obtener la información detallada de

diskutil info /Volume/foo 

En particular ver Unidad óptica y medios ópticos entradas que sólo se consigue para CD/DVD por lo que es bastante fiable.

Lamentablemente, los marcos que diskutil utilizan para obtener toda esa información son privados, por lo que será difícil replicarlos en código C.

Yo no profundizar en otras opciones, pero ya que se puede obtener el nombre del disco statfs Puede ser en teoría es posible utilizar IOKit de revisar el dispositivo y nos vemos IOCDMedia o IODVDMedia clase si es una unidad de CD/DVD (es decir,si usted busca IO*Media clase de la propiedad BSD Name tiene el nombre del disco como disk6)

2

Apple Developer Central tiene un proyecto llamado código de ejemplo que muestra el uso de CDROMSampleIOKit rutinas para acceder a las propiedades de CD-ROM. Esto también podría darle inicio al manejo de DVD.

Cuestiones relacionadas