Имена устройств оптических дисков (пример: /dev/disk4) немного странные в Mac OS X. В отличие от других ОС, они принадлежат смонтированному носителю, а не дисководу, поэтому существуют только тогда, когда диск вставлен. Кроме того, они недолговечны. Они могут измениться уже при монтировании другого файла .dmg до того, как следующий диск будет вставлен в дисковод. В Windows буквы дисков стабильны, а в Linux есть имена устройств, такие как /dev/cdrom или /dev/sr0, которые довольно стабильны. Изменения в жестких дисках, USB-накопителях и пакетах не влияют на имена оптических устройств.
Я разрабатываю библиотеку C, работающую с аудио компакт-дисками, и хочу использовать нумерацию дисков, предоставленную drutil из C. drutil list
перечисляет все диски, подключенные к машине (с дисками или без них, и дает им номера. С помощью drutil details -drive 1
я могу затем получить сведения о первом диске, включая имя устройства (BSD), когда диск находится в приводе.Это было бы идеально, чтобы установить предпочтительный привод в конфигурации или аналогичном.
В C я не мог перечислить или проиндексировать диски без дисков. Поэтому, когда я получаю первый вставленный диск, я не знаю, какому приводу принадлежит этот диск. Я могу получить имена устройств для вставленных дисков с расширением IOCDMediaClass
. Я получаю один диск, указанный с IOCDBlockStorageDeviceClass
(с вставленным диском или без него), но я не могу получить доступ к имени устройства, даже когда диск находится в дисководе.
Я подготовил пример кода, который пытается перечислить элементы обоих классов и имя устройства, если оно доступно. .
Выход без диска в приводе:
detected media:
detected CD block devices:
drive 1:
class name: IODVDServices
Выход с диском в приводе:
detected media:
drive 1:
device name: disk4
class name: IOCDMedia
detected CD block devices:
drive 1:
class name: IODVDServices
PS: я знаю, что могу вызвать drutil из C, но это будет крайняя мера.