Unix - статьи



         

Управление файлами устройств - часть 2


Флаг, переданный функции open, указывает, что файл открыт только для чтения. Дальнейший доступ к устройству будет выполняться с помощью полученного дескриптора cdd. В Linux 2.4.22 каждый процесс может открыть не более 1048576 дескрипторов одновременно []. Нашим программам этого будет вполне достаточно. Мы предполагаем, что устройство /dev/cdrom установлено в системе и работает правильно, однако, в общем случае неплохо проверить значение дескриптора, возвращенное open, на предмет ошибки (в этом случае функция возвращает -1, переменная errno содержит дополнительный код ошибки).

Вызовы ioctl, связанные с воспроизведением Audio CD, приведены в таблице 1.

Вызов Описание Дополнительный параметр

CDROM_DRIVE_STATUS Получение данных о состоянии устройства константа CDSL_XXX
CDROM_DISC_STATUS Получение данных о диске константа CDSL_XXX
CDROMREADTOCHDR Чтение заголовка оглавления диска структура cdrom_tochdr
CDROMREADTOCENTRY Чтение элемента оглавления диска структура cdrom_tocentry
CDROMSUBCHNL Чтение данных о параметрах воспроизведения структура cdrom_subchnl
CDROMPLAYTRKIND, CDROMPLAYMSF Воспроизведение аудиозаписи Структуры cdrom_ti и cdrom_msf
CDROMSTOP Остановка воспроизведения значение 0
CDROMPAUSE, CDROMRESUME Приостановка, возобновление воспроизведения значение 0
CDROMEJECT Открытие лотка устройства значение 0
CDROMCLOSETRAY Закрытие лотка устройства значение 0

Таблица 1.Вызовы ioctl, связанные с воспроизведением Audio CD

Результат запросов CDROM_DRIVE_STATUS и CDROM_DISC_STATUS возвращается не в параметре-ссылке, а как результат функции ioctl. В качестве третьего аргумента в этих запросах выступает одна из констант CDSL_XXX, определенных в файле cdrom.h. Эти константы предназначены для работы с устройствами автоматической смены компакт-дисков (CD changers). В случае "однодискового" устройства следует использовать CDSL_CURRENT. Результатом вызова CDROM_DRIVE_STATUS могут быть значения CDS_NO_DISC (нет диска в устройстве), CDS_DRIVE_NOT_READY (устройство не готово), CDS_DISC_OK (диск обнаружен), а также некоторые другие константы из файла cdrom.h. Среди значений, возвращаемых вызовом CDROM_DISC_STATUS, следует отметить CDS_NO_DISC (см. выше) CDS_AUDIO (диск опознан как аудио) и CDS_MIXED (диск опознан как "смешанный"). Остальные значения соответствуют не- аудиодискам. Нижеследующий фрагмент программы проверяет, готов ли CD- дисковод к передаче данных:




Содержание  Назад  Вперед