Детектор
медийного контента
Синтаксис:
mcd опции*
конфигурационный_файл &
Поддерживаемые
платформы:
Neutrino
Целевые
платформы:
ARM,
PowerPC, SH, x86
Опции:
-D
Определить имя
каталога со списком носителей медиаинформации; значение по
умолчанию – .devices.
-E
Определить имя
файла извлечения носителя медиа-информации; значение по
умолчанию – .eject.
-I
Определить имя
файла вставки носителя медиа-информации; значение по умолчанию
– .insert.
-n
Определить точку
монтирования подсистемы; значение по умолчанию – /dev/mcd.
-v
Увеличить уровень
подробности сообщений, записываемых в sloginfo, с 0 до 7.
-V
Выводить выходные
сообщения на консоль, а также в sloginfo.
конфигурационный_файл
Путевое имя
соответствующего конфигурационного файла.
Описание:
Утилита
mcd
((media content detector, MCD – детектор медийного контента)
отслеживает подключение и извлечение носителей
медиа-информации, а также наличие соответствующего медийного
контента.
Содержание
этой
страницы
утилиты:
-
Обзор
утилиты
mcd
-
Правила
MCD
-
Сервер
MCD
-
Последовательность
операций
-
Конфигурирование
MCD
-
Описания
объектов
-
Правила
медийного
контента
-
Использование
MCD
в качестве программы автоматического монтирования
файловой системы
-
Интерфейс
менеджера
ресурсов mcd
-
Шаблоны
вызова
-
Уведомление
о
подключении и извлечении
-
Определение
медийного
контента
-
API-интерфейс
клиента
-
Дополнительная
информация
Обзор
MCD –
это самостоятельная утилита, предназначенная для обнаружения
устройств, носителей медиа-информации и определенного
медийного контента. Она функционирует между драйверами
устройств хранения данных и USB и любым клиентским
приложением, которому необходима информация об операциях с
устройством или носителем медиаинформации или информация о
наличии указанных типов медийного контента.
В MCD
определение действий, выполняемых системой, и выполнение
этих действий разделены. Таким образом, действия можно легко
корректировать или обновлять без изменения кода.
Правила MCD
MCD
обеспечивает каркас в виде двоичного дерева решений, в
котором правила и переходы по ветвям правил применяются
согласно результатам сопоставления
(соответствие/несоответствие). Эти правила используются для
обнаружения подключения и извлечения устройств и носителей
медиа-информации, а также для классификации их содержимого.
Они указаны в конфигурационном файле MCD и реализуются по
вызову пользователя.
Для MCD
можно записать правила об отслеживании наличия или
отсутствия устройства, носителя медиа-информации или файла,
как в следующих трех примерах:
Мониторинг
носителя медиа-информации
В
соответствии со следующим правилом, MCD отслеживает операцию
физической вставки или извлечения носителя медиа-информации
в устройство CD-ROM, которое отображается в /dev/cd*.
[/dev/cd*]
Callout=CD_MEDIA_IOBLK
Мониторинг
изменений
пространства
имен
В
соответствии со следующим правилом, отслеживаются изменения
(монтирование или демонтирование) устройства или носителя
медиаинформации (например, USB-устройства хранения данных) в
системе. Такие изменения обычно указывают на физическое
добавление или удаление устройства и монтирование или
демонтирование его файловой системы.
[/fs/usb*]
Callout=PATH_MEDIA_PROCMGR
Мониторинг
наличия файлов
В
соответствии со следующим правилом, проверяется содержимое /directory с
целью поиска файлов или каталогов, созданных в проверяемом
каталоге или удаленных из него. Например, ввод в командном
интерпретаторе команды touch
/directory/file
удовлетворяет этому правилу, хотя операция вставки или
удаления физического устройства не выполняется.
[/directory/*]
Callout=PATH_MEDIA_SCAN
Примечание.
MCD можно использовать в качестве структуры для построения
независимой системы обнаружения контента.
Сервер MCD
Функции сервера
MCD:
-
контролирует
заданный
пользователем набор устройств и соответствующие носители
медиаинформации;
-
предпринимает
попытки
определения типа данных на носителях медиаинформации
(например, звуковой компакт-диск или фильм на
DVD-диске);
-
уведомляет
клиентов
о наличии обнаруженной медиаинформации.
Примечание.
В настоящей документации принято следующее:
-
носитель
медиаинформации
никогда не обозначает конкретный носитель
медиаинформации; под ним всегда подразумевается любой
носитель медиаинформации указанного типа:
компакт-диск, но, например, не компакт-диск I'm Your
Man
Леонарда Коэна.
-
неформатированный
компакт-диск
или USB-накопитель считается устройством, поскольку в
исходном состоянии на нем отсутствует медийный контент;
-
USB-накопитель
с
двумя разделами – это одно устройство с двумя носителями
медиаинформации.
Последовательность
операций
В этом разделе
описана последовательность операций MCD при запуске и при
обнаружении нового устройства, носителя медиаинформации или
файла.
Запуск
При запуске
сервера MCD выполняются следующие действия:
-
Чтение
конфигурационного
файла;
-
Создание
выделенного
потока для доступа к интерфейсу менеджера ресурсов.
-
Для
всех носителей медиаинформации, перечисленных в
конфигурационном файле, выполняются следующие действия:
-
Создание
выделенного потока обнаружения устройства;
-
Выполнение
подпрограммы
уведомления в отдельном потоке.
Примечание.
Возможно одновременное выполнение нескольких потоков
обнаружения для различных носителей медиа-информации.
Устройство или
вставка
При обнаружении
вставки устройства или носителя медиаинформации или наличия
соответствующего файла MCD выполняет следующие действия:
-
создание
нового
потока обработки правил обнаружения контента для данного
устройства, носителя медиаинформации или файла;
-
завершение
потока
после завершения обработки правил.
Конфигурирование
MCD
Действия
MCD
контролируются
с помощью конфигурационного файла. Этот файл содержит
разделы с присвоенными именами, каждое из которых заключено
в квадратные скобки ([ ]),
после которых следуют строки параметров в формате ключ = значение. Эти
параметры применяются только к разделу, в котором они
указаны.
Примечание.
Пример конфигурационного файла MCD 2phase.cfg
входит в поставку MCD; в конфигурационном файле mcd.conf
содержатся примеры использования в пакете Aviage Multimedia
suite (MME).
MCD
игнорирует пустые строки и начальные или завершающие
пробельные символы. Строки, начинающиеся с "#" или ";",
обрабатываются как комментарии и тоже игнорируются.
Разделы
конфигурационных файлов
Раздел
конфигурационного файла MCD может содержать один из
следующих вариантов:
-
Описание
объекта
(устройства, носителя медиаинформации или файла) – имя
раздела начинающееся с символа "/" (например, /dev/cd0).
См. "Описания объектов" далее.
-
Правило
медийного
контента – любое имя, не начинающееся с "/". См.
"Правила медийного контента" далее.
В приведенном ниже
примере представлены описание ([/dev/cd0]) и правило: [DVD_AUDIO]:
[/dev/cd0]
Callout =
CD_MEDIA_IOBLK
Argument =
1000,2000
Priority = 11,9
Start Rule =
DVD_OR_CD
[DVD_AUDIO]
Callout =
FNAME_MATCH
Argument =
/AUDIO_TS/AUDIO_TS.IFO
Match Rule =
DVD_VIDEO
Fail Rule =
DVD_VIDEO
Описания
объектов
Для
разделов описаний объектов (устройств, носителей
медиаинформации или файлов) объектом, который отслеживается
MCD, является имя раздела. Это может быть конкретное имя,
например /media/drive, или
шаблон с групповым символом, например /dev/umass*. Если
имя раздела представляет собой шаблон с групповым символом,
подпрограмма уведомления о событиях, заданная для раздела с
помощью параметра Callout=,
должна обрабатывать все объекты, соответствующие этому
шаблону.
Параметры
Использование
конфигурационных
параметров
отличается в зависимости от типа раздела (описание носителя
медиаинформации или правило контента), в котором они
указаны.
Параметры
в
разделе
объектов конфигурационного файла используются следующим
образом:
Callout=
Подпрограмма
уведомления, выполняется MCD при обнаружении объекта,
определенного в имени раздела. Каждая подпрограмма
уведомления выполняется в собственном потоке, что позволяет
при необходимости выполнять блокировку или опрос.
Если
подпрограмма Callout= не
задана, необходимо внешнее управление операциями с
устройством, файлом или носителем медиаинформации.
Уведомление при этом выводится через интерфейс менеджера
ресурсов.
Argument=
Необязательный
аргумент, который передается подпрограмме уведомления,
заданной с помощью параметра Callout=.
Priority=
Приоритеты
выполнения для объекта, определенного в текущем разделе:
Start Rule=
Корень дерева
решений, которое будет использовано для выбора типа
медийного контента, указывает на первое правило, которое
применяется к каждому объекту после уведомления о
подключении устройства.
Stop Rule=
Корень вызовов, выполняемых при удалении объекта.
Правила
медийного контента
Для разделов
правил медийного контента конфигурационного файла mcd имя раздела
является именем правила.
Параметры
Параметры в
разделе правила медийного контента конфигурационного файла
используются следующим образом:
Callout=
Подпрограмма
уведомления, выполняемая MCD при обнаружении объекта,
соответствующего правилу контента в имени раздела. См.
"Подпрограмма уведомления" далее.
Argument=
Необязательный
аргумент, который передается подпрограмме уведомления,
заданной с помощью параметра Callout=.
Match Rule=
Ветвь дерева
принятия решений, выполняемая при соответствии медийного
контента правилу контента.
Fail Rule=
Ветвь вызовов,
выполняемая при несоответствии медийного контента правилу
контента.
Примечания. Приоритет выполнения правила определяется в
разделе объекта, с которого начинается цепочка правила.
Подпрограмма
уведомления
Подпрограмма
уведомления,
выполняемая
при соответствии носителя медиа-информации правилу, создает
результат сопоставления и указывает, соответствует ли
медиа-информация на носителе определенным требованиям
подпрограммы. В зависимости от результата применения
правила, MCD переходит к другому правилу, указанному в
параметрах Match Rule= или Fail Rule=
текущего раздела.
Если
связанная ветвь правила для результата применения правила не
указана, то MCD определяет данное правило как последнее, а
процедуру обнаружения контента как завершенную.
Примечание.
Если в правиле отсутствует параметр Callout=,
то MCD определяет соответствие правилу в зависимости от
наличия связанной ветви правила. При отладке эту особенность
можно использовать для деактивации проверки и создания ветви
к следующему правилу.
Использование
MCD в качестве программы автоматического монтирования
файловой системы
MCD
можно использовать в качестве программы автоматического
монтирования файловой системы с помощью создания набора
двухфазных правил в конфигурационном файле MCD. Двухфазные
правила реализуются в MCD следующим образом:
Записи первого
уровня
-
Первый
уровень
записей в конфигурационном файле MCD охватывает не
носители медиаинформации, а устройства, действия с
которыми можно отслеживать с помощью доступных вызовов
MCD.
-
Параметр
Start
Rule= на
первом уровне записей указывает на вызов MOUNT_FSYS,
встроенной подпрограммы для монтирования файловых систем
на основе простых критериев для носителей
медиаинформации.
-
При
монтировании файловой системы на втором уровне записей
(для носителей медиаинформации) используется уведомление
о вставке с помощью встроенной подпрограммы
PATH_MEDIA_PROCMGR.
Записи второго
уровня
Пример
использования MCD в качестве программы автоматического
монтирования файловой системы см. в "Пример двухфазного
монтирования файловой системы" в разделе "Примеры" далее.
Интерфейс
менеджера ресурсов mcd
Сервер
MCD обеспечивает стандартный интерфейс менеджера ресурсов
QNX (аналогичный файловой системе). Каталогом высшего уровня
по умолчанию является /dev/mcd; он
содержит:
-
набор
файлов
S_IFNAM/name-special (.insert и
.eject),
используемых MCD для обеспечения API-интерфейса клиента
с системой;
-
каталог
.devices,
содержащий записи всех объектов, известных системе.
Примечание.
Для изменения каталога верхнего уровня используется опция
командной строки -n.
Файлы .insert и .eject
Файлы .insert и .eject
доступны только для записи и находятся в каталоге /dev/mcd.
Внешние программы могут инициировать процесс обнаружения
контента MCD при вставке или извлечении объекта путем записи
в соответствующий файл путевого имени вставленного или
извлеченного объекта, например /dev/cd1.
Примечание.
Если для аппаратного устройства, из которого извлечен
носитель медиа-информации, уведомление об извлечении не
поддерживается, MCD обрабатывает следующее уведомление о
вставке как неявное событие извлечения.
Каталог .devices
Каталог
.devices в /dev/mcd
содержит записи для всех объектов (устройств, носителей
медиаинформации и отслеживаемых файлов), известных системе.
Каждому объекту в этом каталоге соответствует файл S_IFCHR/char-
special. В полях этих
файлов информация об объектах представлена в следующем виде:
Примечание.
Записи в каталоге .devices отображаются
только для объектов, которые были вставлены хотя бы один
раз. Поскольку разделы объектов могут быть определены
групповыми символами, полный список потенциальных
соответствий объектов не может быть известен заранее.
Информация об объекте доступна для MCD только после вставки.
Таким образом, если клиентское приложение предпринимает
попытку выполнения stat() для определенного
устройства, которая завершается неуспешно, и возвращается
ENOENT, то этот результат обрабатывается как значение 0 в
поле st_ino (т.е. устройство извлечено).
Порядковый
номер
Порядковый
номер,
сохраненный
в st_ino для любого объекта (устройства, носителя
медиа-информации или файла), может иметь нулевое или
отличное от нуля значение. Нулевое значение предполагает
отсутствие объекта в системе. Отличное от нуля значение
предполагает наличие объекта в системе.
Каждый
раз при вставке объекта MCD увеличивает порядковый номер
этого объекта. Например, для носителя медиа-информации
значения st_ino могут иметь следующую
последовательность: 1 (первая вставка), 0 (извлечение), 3
(повторная вставка), 0 (извлечение), 5 (повторная вставка).
Увеличивающееся значение st_ino может быть
использовано клиентским приложением при каждом изменении
состояния, например для проверки соответствия состоянию
носителя медиаинформации после нескольких быстрых операций
вставки и извлечения. Для получения дополнительной
информации см. "Устаревшие правила" далее.
Пример.
Иерархия файловой системы
Пример
иерархии файловой системы:
$ ls -al /dev/mcd
dr-xr-xr-x 1 root
root 11 Aug 02 19:46 .
n-w--w--w- 1 root
root 0 Aug 02 19:46 .eject
n-w--w--w- 1 root
root 0 Aug 02 19:46 .insert
nr--r--r-- 1 root
root 0 Aug 02 19:46 CDDA_OR_DTS
nr--r--r-- 1 root
root 0 Aug 02 19:46 CD_AUDIO
nr--r--r-- 1 root
root 0 Aug 02 19:46 DVD_AUDIO
nr--r--r-- 1 root
root 0 Aug 02 19:46 DVD_OR_CD
nr--r--r-- 1 root
root 0 Aug 02 19:46 DVD_VIDEO
nr--r--r-- 1 root
root 0 Aug 02 19:46 MIXED_AV
nr--r--r-- 1 root
root 0 Aug 02 19:46 SVIDEO_CD
nr--r--r-- 1 root
root 0 Aug 02 19:46 VIDEO_CD
Записи
только
для
чтения, предусмотренные для правил
Каталог
верхнего уровня /dev/mcd
содержит для каждого правила, определенного в
конфигурационном файле записи, доступные только для чтения.
Клиентские
приложения
могут
считывать из него имя устройства, соответствующего
определенному правилу, и блокировать доступ для чтения до
тех пор, пока устройство с контентом, соответствующим этому
правилу, не будет доступно. Также доступен механизм выбора и
уведомления без блокировки, позволяющий клиенту дождаться
выполнения нескольких правил или выполнять другие операции
до вызова правила. После уведомления клиентским приложением
может быть выполнено чтение правила для выбора устройства.
Шаблоны вызова
Сервер
MCD обеспечивает структуру для построения системы
обнаружения контента. Подпрограммы вызова обеспечивают в
этой системе обнаружения контента все специальные функции.
MCD
содержит некоторые общие подпрограммы, доступные для
использования в статически связанной библиотеке сервера. MCD
также поддерживает подпрограммы расширения внешних
поставщиков в DLL-библиотеках, динамически связываемых во
время выполнения. Таким образом, существует возможность
расширения системы: если требуется новый неподдерживаемый
тест обнаружения, то такой тест может быть создан вне
сервера и поставлен в виде отдельной библиотеки.
В
конфигурационном файле системы обнаружения контента все
элементы Callout=
относятся к вызову. Эти вызовы определяются как внутренние
или внешние в зависимости от имени.
-
Если
имя
функции содержит символ "at" (@)
(например, myfunc@mylib.so),
то это внешняя функция в указанной DLL-библиотеке,
которая преобразуется во время выполнения.
-
Если
имя
функции не содержит символ @,
выполняется вызов внутренней встроенной подпрограммы.
Примечание.
Модули расширения должны содержать заголовочный файл MCD с
соответствующими описаниями и определениями типов.
Уведомление
о
вставке и удалении
Прототип для
вызовов уведомления о вставке носителя имеет следующий вид:
void
mcd_notify( char *iomgr[2], char *device, void
*arg );
MCD создает эту
подпрограмму в выделенном потоке для непрерывного контроля
устройства. Этот поток не возвращает значений, за
исключением возникновения
серьезной ошибки. Если в потоке возникает серьезная ошибка,
устанавливается соответствующее значение errno, и
поток завершается. После завершения потока обнаружения
объектов MCD выполняет следующие действия:
-
регистрация
ошибки;
-
остановка
мониторинга
объекта, в потоке мониторинга которого возникла ошибка;
-
дальнейший
мониторинг
других потоков обнаружения объектов.
Аргументы
iomgr
Массив,
содержащий имена записей интерфейсов, на которых обнаружены
события вставки и извлечения. В системе по умолчанию
iomgr[0] = "/dev/mcd/.insert" и
iomgr[1] = "/dev/mcd/.eject", но в фактических
строках отражены все значения, переопределенные в командной
строке.
device
Указывает на имя
контролируемого устройства, носителя медиаинформации или
файла.
В
качестве значения аргумента device может быть указан
групповой символ; в этом случае подпрограмма контролирует
группу устройств, файлов или носителей медиаинформации. В
случае события устройства подпрограмма записывает в
соответствующий путь iomgr[] имя конкретного
устройства, носителя медиаинформации или файла, которые
затрагивает данное событие.
arg
Аргумент,
специфичный для подпрограммы. Этот специфичный для
подпрограммы аргумент, определяется как параметр Argument= записи
соответствующего устройства в конфигурационном файле.
Встроенные
подпрограммы уведомления
К
встроенным подпрограммам уведомления о медийном контенте MCD
относятся следующие:
CD_MEDIA_IOBLK
Эта подпрограмма
обеспечивает интерфейс между системой и CD- и
DVD-дисководами, управляемыми файловой системой devb/io- blk. В ней
используется функция файловой системы по автоматической
деактивации открытых дескрипторов файлов при изменении
носителя: подпрограмма открывает блок-ориентированный
специальный файл устройства и периодически опрашивает его,
при этом результат EBADF обрабатывается как индикатор
изменения состояния. Различие между операциями вставки и
извлечения определяется путем анализа объявленного размера
устройства.
Опция Argument=
определяет периоды опроса (в миллисекундах) дескриптора
файла при отсутствии носителя медиаинформации и при его
наличии. Значение по умолчанию для этого аргумента – "1000,2000", что
соответствует интервалу в 1 секунду при отсутствии носителя
медиаинформации и в 2 секунды – при его наличии.
USB_MEDIA_ENUM
Только для QNX
Neutrino 6.3.n. Эта
подпрограмма обеспечивает интерфейс между системой и
утилитой umass-enum
(которая в QNX Neutrino 6.4.0 заменена на enum-usb). Она
преобразует события изменения состояния USB-устройства из
исходного формата в события вставки и извлечения, ожидаемые
сервером распознавания USB-устройств, указанного в опции Argument=.
В опции
Argument=
указывается имя сервера распознавания USB-устройств, к
которому необходимо подключиться (как правило, это "/dev/umass-enum").
PATH_MEDIA_PROCMGR
Эта подпрограмма
обеспечивает соединение системы с любым устройством,
динамически присоединяющим путевое имя менеджера ресурсов
(при его наличии) и отсоединяющим путевое имя (при
отсутствии менеджера ресурсов). Для получения уведомления об
изменениях в глобальном пространстве путевых имен
используется функция procmgr_event() (доступная
начиная с версии QNX Neutrino 6.3.0 SP2), а затем
выполняется сканирование добавления и/или удаления точек
монтирования устройства, соответствующих шаблону,
определенному в имени вызова.
В опции
Argument=
определяется имя специального каталога, в котором pathmgr ОС
осуществляет ведение точек монтирования (как правило, "/proc/mount").
PATH_MEDIA_SCAN
Эта подпрограмма
осуществляет поиск имен файлов, соответствующих шаблону,
определенному в имени вызова. Она аналогична подпрограмме
PATH_MEDIA_PROCMGR, но поскольку создание и удаление файлов
не приводит к инициированию событий в файловой системе, ее
функция заключается в сканировании указанного каталога с
определенной периодичностью.
Подпрограмма
PATH_MEDIA_SCAN
обеспечивает
следующее поведение MCD в зависимости от наличия или
отсутствия завершающего символа "/" в конце путевого имени:
-
"/"
присутствует – путевое имя существует как каталог (в
т.ч. как корневой каталог смонтированной файловой
системы), отправляется одно уведомление;
-
"/"
отсутствует – отправляется уведомление о каждом файле в
указанном каталоге, соответствующем шаблону имени.
В опции Argument= устанавливается
период опроса для сканирования каталога в миллисекундах.
Определение
медийного контента
Прототип вызовов
правил обнаружения контента:
int
mcd_content( char *device, void *arg );
Аргументы
device
Имя устройства или
носителя медиаинформации без файловой системы.
arg
Аргумент,
специфичный для подпрограммы. Этот специфичный для
подпрограммы аргумент определяется параметром Argument=
соответствующей записи правила в конфигурационном файле.
Возвращаемое
значение
Эта
подпрограмма возвращает следующие значения:
-
MCD_RULE_MATCHED
–
соответствие для правила обнаружено.
-
MCD_RULE_NO_MATCH
–
соответствие для правила не обнаружено.
-
MCD_RULE_ABORT
–
возникла серьезная ошибка; устанавливается errno
и процесс обнаружения для устройства завершается.
Примечание.
Если для вызываемой подпрограммы требуется доступ к файловой
системе устройства, для поиска соответствующей точки
монтирования подпрограммой может использоваться
DCMD_FSYS_MOUNTED_BY devctl.
Встроенные
правила обнаружения контента
К
встроенным в MCD подпрограммам обнаружения контента
относятся:
DVD_OR_CD
Это правило
используется для определения типа диска с медиаинформацией:
DVD или CD (с помощью команды READ DVD STRUCT).
Опция Argument= игнорируется.
Соответствие правилу возможно только в том случае, если
носитель является DVD- диском.
CD_AUDIO
Это правило
используется для обнаружения на компакт-диске звукового
контента (с помощью команды READ TOC).
Опция Argument=
игнорируется. Соответствие правилу возможно только в том
случае, если носитель содержит звуковые дорожки.
Примечание.
Для упрощения обнаружения смешанных компакт-дисков и
компакт-дисков расширенного формата, содержащих звуковые
файлы и компоненты файловой системы, правило CD_AUDIO можно
настроить в качестве нетерминального состояния; т.о.,
обеспечиваются одновременно ветви Match Rule=
и Fail Rule=. Подобная настройка
правила позволяет перейти к другим правилам обнаружения
контента после проверки наличия звукового контента.
BLANK_CD
Это правило
используется для определения пустого или незаписанного
компакт-диска (с помощью команды READ DISK INFORMATION).
Опция Argument=
игнорируется.
Примечание.
Команда READ DISK INFORMATION и физическое обнаружение
пустых дисков поддерживаются только более новым
оборудованием CD-RW. Для более старого оборудования CD-ROM
эти возможности недоступны. В действительности на таком
оборудование вставленный пустой или незаписанный диск может
быть не обнаружен.
FNAME_MATCH
В этом правиле
используется функция fnmatch() для сопоставления
путевых имен файлов в файловой системе устройства. Для этого
вставленный носитель медиаинформации должен являться
файловой системой или содержать смонтированную файловую
систему, поскольку для него выполняется проверка access().
При необходимости правилом автоматически выполняется
разрешение имен на уровне файловой системы.
Это
поведение означает следующее:
-
При
выполнении цепочки правил вне устройства,
представляющего собой файловую систему (например, [/fs/cd*]),
эта файловая система является точкой монтирования, в
которой правилом FNAME_MATCH осуществляется поиск имен
файлов.
-
В
случае перехода к правилу FNAME_MATCH из устройства
(например, [/dev/cd0]),
это правило:
-
определяет
точку
монтирования /dev/cd0
(вероятно, /fs/cd0);
-
выполняет
в
файловой системе поиск совпадающих имен файлов.
Опция Argument=
представляет собой список путевых имен, разделенных
запятыми, на основе корневого каталога файловой системы.
Если MCD обнаруживает любое из этих путевых имен в списке на
носителе медиаинформации, то это – соответствие правилу.
FNAME_PATTERN
В этом правиле
используется функция fnmatch() для сопоставления
шаблонов имен файлов в файловой системе носителя
медиаинформации. Вставленный носитель медиаинформации должен
быть файловой системой или содержать смонтированную файловую
систему, поскольку для него выполняется прослеживание nftw().
Любая такая файловая система будет автоматически обнаружена
с помощью правила.
В опции
Argument=
определен список шаблонов, разделенных запятыми. Если имя
файла, соответствующее любому из шаблонов в списке,
существует в каком-либо каталоге в файловой системе, то это
– соответствие правилу.
Для
этой опции поддерживается несколько других опций,
встраиваемых в указанные шаблоны. Пример: Argument =
depth=2,*.c,*.h". К
этим "встраиваемым" опциям относятся следующие:
-
basedir= –
определить подкаталог, с которого начинается
сканирование; по умолчанию используется корневой каталог
текущего объекта;
-
depth= –
определить максимальное число уровней подкаталога для
рекурсии (т.е. максимальная глубина от корневого
каталога); значение по умолчанию – 0, т.е. предел
глубины отсутствует.
По умолчанию на
совпадение с шаблоном сканируется вся целевая файловая
система. Опции basedir= и depth=
применяются для конкретизации и ограничения сканирования.
MOUNT_FSYS
Это правило
используется для монтирования файловой системы на указанном
устройстве и использования MCD в качестве программы
автоматического монтирования.
В опции
Argument=
определяется имя файла правил монтирования. Поскольку при
каждом применении правила эта опция открывается и
выполняется ее синтаксический анализ, целесообразно
сохранить имя файла на псевдодиске или в каталоге /dev/shmem.
В
большинстве случаев это правило используется в качестве Start Rule= в
двухфазной конфигурации, где конечная операция монтирования
вызывает действие PATH_MEDIA_PROCMGR. Правила обрабатываются
поочередно. Обработка останавливается при обнаружении
первого совпадения (fnmatch()) или
при необходимости пропуска устройства (если для правила
определен только шаблон, но отсутствует информация о
монтировании). С целью выбора соответствующей файловой
системы можно указать несколько правил для съемного
устройства.
Формат
файла – одно правило в строке, при этом каждая строка
содержит поля, разделенные пробельными символами. Пример.
#Device_pattern
Mount_point Fsys_type Mount_options
/dev/cd* /fs/cd%#
udf normv
/dev/cd* /fs/cd%#
cd normv,case=upper
/dev/umass*t1[124]
/fs/usb%0 dos fsi=use
/dev/umass*t[146]
/fs/usb%0 dos
/dev/hd*
В результате
применения правил, представленных в приведенном выше примере,
MCD выполняет следующие действия:
-
предпринимает
попытку
монтирования каждого компакт-диска как файловой системы
UDF;
-
в
случае сбоя при монтировании компакт-диска в качестве
файловой системы UDF – предпринимает попытку его
монтирования как файловой системы ISO9660;
-
игнорирует
жесткие
диски;
-
монтирует
/dev/cdn в
качестве /fs/cd0n;
-
монтирует
разделы
USB-устройства в качестве DOS в первую доступную точку
монтирования файловой системы.
Для получения
дополнительной информации о последовательностях точек
монтирования см. "Специальные последовательности MOUNT_FSYS"
далее.
Примечание.
Опция монтирования normv позволяет избежать
конфликты при совпадении пространства имен ОС. Она
необходима только в том случае, если функция mcd.mnt
сконфигурирована для использования UDF, а затем CD, и для
нее требуется PSP "TC630SP2_1828_fsys-EIDE".
UNMOUNT_FSYS
Это правило
применяется для демонтирования файловой системы на носителе
медиаинформации, указанном в имени правила. Опция Argument=
игнорируется.
Обычно
это правило используется в качестве Stop Rule= для
носителя медиаинформации CD_MEDIA_IOBLK, использующего
действие MOUNT_FSYS, если в противном случае, установка
сохранилась бы после извлечения носителя медиаинформации.
Если носитель медиаинформации представлен менеджером resmgr,
который завершается самостоятельно или извне (например,
USB-устройством), то соответствующая файловая система
демонтируется автоматически без необходимости применения
этого правила. Однако в большинстве экземпляров, в которых
используется MOUNT_FSYS, также следует настроить
соответствующее правило UNMOUNT_FSYS для обеспечения
надлежащего демонтирования файловой системы извлеченного
носителя медиаинформации.
Специальные
последовательности MOUNT_FSYS
В
правиле MOUNT_FSYS используются следующие специальные
последовательности:
-
%#
обеспечивает развертывание до номера основного
устройства носителя медиаинформации. Например, если
указано /fs/cd%#,
то каталог /dev/cd0
монтируется в /fs/cd0, а
каталог /dev/cd1 –
в /fs/cd1. %# не
допускает использование нескольких разделов; для этого
доступна последовательность %0.
-
%0
обеспечивает развертывание до следующего уникального
номера. Преимущественно используется для применения
правил нескольких разделов USB-устройства в mcd.mnt с
именами точек монтирования /fs/usb%0.
При наличии последовательности %0 в
имени MCD выполняет попытку выделения каталогов /fs/usb0, /fs/usb1, /fs/usb2 и
т.д. (начиная с 0) до обнаружения уникального имени
точки монтирования. Например, если в /fs/usb0 и
/fs/usb1
уже смонтированы файловые системы, MCD обеспечивает
развертывание /fs/usb%0 до
/fs/usb2.
Пример
файла mcd.mnt, в
котором используются специальные последовательности %# и %0:
#------------------------------------------------------
# Device Mountpt
Type Options
#------------------------------------------------------
/dev/cd* /fs/cd%#
cd normv
/dev/umass[0-9]* /
enum
/dev/umass[0-9]*t1[1234]
/fs/usb%0
dos
/dev/umass[0-9]*t1[1234].*
/fs/usb%0
dos
/dev/umass[0-9]*t[146]
/fs/usb%0
dos
/dev/umass[0-9]*t[146].*
/fs/usb%0
dos
/dev/umass*t7[789]
/fs/usb%0 qnx4
/dev/umass*t17[789]
/fs/usb%0
qnx6 sync=optional
/dev/umass[0-9]*
/fs/usb%0 dos
API-интерфейс
клиента
Для уведомления клиентских
приложений о соответствиях медийного контента MCD использует
специальные записи правил, созданные в файловой системе
менеджера ресурсов.
Из
клиентского приложения может быть вызвана функция open()
для перехода к необходимой записи правила, а в случае
соответствия правилу – функция read() для чтения из
записи имени соответствующего носителя медиаинформации.
Функция
read() блокируется до обнаружения соответствия (если
для oflag не установлено значение O_NONBLOCK). Для
уведомлений без блокировки используется функция ionotify().
Для ожидания выполнения нескольких правил используется
функция select().
Сохраняемая
информация
Для
однократного информирования клиента о каждом совпадении на
сервере MCD сохраняется информация о состоянии каждого
носителя медиаинформации, соответствии правилу и клиентском
приложении.
При
вставке нового носителя медиаинформации правило, для
которого обнаружено соответствие, инициирует уведомления
заинтересованных клиентов. Если носитель медиаинформации
вставлен до регистрации клиента в MCD, первый запрос на
чтение этого носителя выполняется немедленно. Это поведение
исключает состояния состязания, например когда при запуске
системы носитель уже находится в дисководе, а процесс
обнаружения контента завершен до запуска высокоуровневых
клиентских приложений.
Пример.
Мультимедийный проигрыватель.
Простой
мультимедийный проигрыватель можно создать следующим
образом:
int fd, cd;
char
device[_POSIX_PATH_MAX];
// Открыть правило
CD_AUDIO и дождаться обнаружения соответствия.
fd =
open("/dev/mcd/CD_AUDIO", O_RDONLY);
while (read(fd,
device, sizeof(device)) != -1) {
//
В этот момент в устройстве находится звуковой компакт-диск
...
cd
= open(device, O_RDONLY);
//
... чтение содержимого, воспроизведение и т.д.
//
Возможность отслеживания статуса воспроизведения с помощью
//
DCMD_CAM_CDROMSUBCHNL.
//
При извлечении диска будет завершено неуспешно.
//
Возможность возврата и ожидания следующей вставки.
//
Обновление правила для
//
следующего совпадения.
close(cd);
}
close(fd);
Пример.
Опрос.
Цепочки
правил Start
Rule= и Stop Rule=
устройства mcd
являются взаимоисключающими: извлечение устройства приводит
к отмене правил вставки для этого устройства (и наоборот).
Поэтому в случае использования функции select() или ionotify() их
следует выполнять совместно с функцией read() без
блокировки, поскольку сообщаемое состояние и/или правила
триггера могут быть недействительными (например, в случае
извлечения носителя между вызовами ionotify() и read()).
Фрагмент
кода
для
применения функции ionotify() совместно с функцией read()
без блокировки:
fd =
open(rulename, O_RDONLY | O_NONBLOCK);
SIGEV_UNBLOCK_INIT(&evt);
for
(;;) {
while
(ionotify(fd, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT,
&evt)
!= 0) {
while
(read(fd, device, sizeof(device)) > 0) {
//
значение "device" сопоставляется с "rulename".
}
}
pause();
}
Примечание.
В реальной ситуации событие с высокой долей вероятности
являлось бы импульсом, и, в отличие от приведенного
фрагмента кода с паузами, существовал бы управляемый
событиями цикл.
Устаревшие
правила
Правила
могут устаревать при отключении клиента и/или задержке между
уведомлением и использованием вставленного носителя
медиаинформации, например из-за вызова отдельного
медиаприложения.
Во
избежание устаревания правил MCD может добавить порядковый
номер вставки носителя медиаинформации в уведомление о
правиле, который в дальнейшем будет сопоставляться
приложениями с записью устройства в каталоге /dev/mcd/.devices. Если
устройство извлекается после вызова правила, эти значения
больше не совпадают, т.е. правило больше не относится к
текущему контенту устройства и могли быть вызваны новые
правила.
Если
для клиентского приложения необходим порядковый номер
операции вставки, MCD использует чтение XTYPE для возврата
дополнительного uint32_t с
данными и именем носителя медиаинформации и код приоритета
сообщения _IO_XTYPE_MQUEUE. Это исключает необходимость
внесения изменений в глобальный заголовочный файл .
// Получение
уведомления о правилах с использованием чтения XTYPE
int fd;
uint32_t seq1;
char
device[_POSIX_PATH_MAX];
fd =
open("/dev/mcd/CD_AUDIO", O_RDONLY);
_readx(fd, device,
sizeof(device), _IO_XFLAG_BLOCK | _IO_XTYPE_MQUEUE,
&seq1,
sizeof(seq1));
// Открытие и
проверка текущей версии вставленного устройства
int fd;
struct stat st;
uint32_t seq2;
char
entry[_POSIX_PATH_MAX];
fd = open(device,
O_RDONLY);
sprintf(device,
"/dev/mcd/.devices/%s", device);
seq2 =
(stat(device, &st) != -1) ? st.st_ino : 0;
// В случае
совпадения правило CD_AUDIO не изменено и по-прежнему
действительно,
// а каталог "fd"
открыт в данной версии носителя
if (seq1 == seq2)
...
Дополнительная
информация
В этом разделе
описывается использование MCD для определенных операций:
-
Обнаружение
других
видов системных носителей
-
Обнаружение
устройств
USB и iPod
-
Сопоставление
с
шаблоном и учет регистра
-
Сопоставление
с
единственным правилом
-
Обнаружение
компакт-дисков
с данными, не являющимися медийным контентом
-
Устройство
смены
компакт-дисков под управлением внешнего
микропрограммного обеспечения
-
Использование
MCD
в качестве перечислителя разделов
Обнаружение
других
видов системных носителей
Обнаружение
системного носителя, не обрабатываемого подпрограммами MCD:
- Определите
отличие
нового типа носителя от всех остальных типов. Во многих
случаях разница может заключаться лишь в наличии на
носителе медиаинформации определенных файлов или
каталогов. Например, диск обновления для навигации можно
распознать по наличию файла acios_db.ini или
config.nfm. В
этом случае для обнаружения используется встроенная
подпрограмма, например FNAME_MATCH; также можно записать
пользовательскую подпрограмму и передать ее в MCD во
внешней DLL- библиотеке.
- Определите
приоритет
проверки данного носителя по отношению к другим тестам (в
первую или в последнюю очередь, после проверки звукового
контента, но до проверки других правил данных и т.д.).
- Создайте
в
конфигурационном файле новый раздел правила для данного
теста с соответствующим правилом Callout= и
соедините его с соответствующей точкой дерева решений
путем изменения параметров Match Rule= или
Fail Rule= как
для предыдущего, так и для нового правила. При совпадении
нового контента имя нового правила может использоваться
для вызова любого клиентского приложения.
Обнаружение
устройств
USB и iPod
MCD может
управлять устройством любого типа, если доступен механизм
уведомления о вставке и запуске процесса обнаружения.
Для USB-устройств
в конфигурационном файле MCD можно использовать следующую
запись:
[/fs/usb*]
Callout =
PATH_MEDIA_PROCMGR
Argument =
/proc/mount
Priority = 11,10
Start Rule = ...
Только для
целевых систем под управлением QNX Neutrino 6.3.n. В
отношении USB-устройств сервер umass- enum
совместно со встроенной подпрограммой MCD USB_MEDIA_ENUM
может обеспечить механизм уведомления и запустить процесс
обнаружения. Для активации интерфейса менеджера ресурсов
вызовите функцию umass-enum с
помощью опции -r и
используйте следующую запись устройства в конфигурационном
файле MCD:
[/dev/umass/*]
Callout =
USB_MEDIA_ENUM
Argument =
/dev/umass-enum
Priority = 11,10
Start Rule = ...
Для устройств
iPod к записям устройств динамически присоединяются путевые
имена (если они доступны), что позволяет выполнять обработку
с использованием встроенной подпрограммы MCD PATH_MEDIA_PROCMGR().
В конфигурационном файле MCD для устройств iPod используется
следующая запись устройства:
[/fs/ipod*]
Callout =
PATH_MEDIA_PROCMGR
Argument =
/proc/mount
Priority = 11,10
Start Rule = ...
Сопоставление
с
шаблоном
и учет регистра
Подпрограмма
MCD
FNAME_MATCH
предпринимает попытку доступа к указанным файлам с помощью
базовой файловой системы, в которой применяются
соответствующие правила в
сочетании с заданными
опциями монтирования. Таким образом, учет регистра при
определении соответствия шаблону зависит от
В следующей
таблице приведены параметры учета и сохранения регистра для
некоторых общих файловых систем:
Файловая
система
|
Учет
регистра
|
Сохранение
регистра
|
FAT
|
Нет
|
Нет
|
ISO
9660
|
Нет
|
Нет
|
Joliet
|
Нет
|
Да
|
QNX4
|
Да
|
Да
|
RRIP
|
Да
|
Да
|
VFAT
|
Нет
|
Да
|
Поскольку
большинство носителей медиаинформации форматируется для
DOS/Windows, наиболее вероятно, что регистр в файловой
системе учитываться не будет. Это означает, что в правилах
FNAME_MATCH список имен файлов Argument= может
быть представлен как в верхнем, так и в нижнем регистре.
Подпрограмма
FNAME_PATTERN
обрабатывает
записи каталога файловой системы с помощью функции libc fnmatch(),
учитывающей регистр.
Вывод
каталога для каждой файловой системы зависит от того,
сохраняется ли в ней регистр. Если регистр в файловой
системе не
сохраняется, для управления представлением имен файлов
используются правила по умолчанию. См. опции монтирования
файловой системы cd
case=lower|upper или dos
sfn=lower|upper|windows.
Поскольку
в
самых
распространенных мультимедийных форматах регистр сохраняется
и используется точное имя файла, заданное пользователем или
медиаприложением при создании файла, во всех правилах
FNAME_PATTERN список шаблонов Argument= должен
быть приведен как в верхнем, так и в нижнем регистрах (см.
правило MIXED_AV в разделе Примеры далее).
Сопоставление
с единственным правилом
Если
соответствие нескольких типов медиаинформации не требуется,
но требуется сопоставление только с первым правилом, можно
воспользоваться тем, что при отсутствии ветви Match Rule=
правила, для которого обнаружено соответствие, MCD
прекращает процесс обнаружения.
В
конфигурационном файле правила можно распределить в порядке
приоритета от Start Rule= до Fail Rule=. Ветви
Match Rule=
указывать не следует. В структуре обнаружения MCD эти
правила проверяются в указанной последовательности до
обнаружения соответствия для одного из правил, после чего
процесс обнаружения завершается. Пример см. в записях
VIDEO_CD и SVIDEO_CD в разделе Примеры далее.
Обнаружение
компакт-дисков с данными, не являющимися медийным
контентом
Для
получения уведомлений при вставке компакт-диска вне
зависимости от его содержимого достаточно выполнить
следующее:
-
создать
фиктивное
правило без подпрограммы Callout=;
-
создать
ветвь
Match Rule=
(при этом при тестировании для правила всегда
обнаруживается соответствие);
-
определить
это
правило в качестве правила Start Rule=
для устройства (для фиктивного правила создается ветвь к
исходному начальному правилу).
Теперь
приложение может блокировать новое правило в стандартном
интерфейсе менеджера ресурсов ("/dev/mcd/DISC_INSERTED") во
время ожидания вставки устройства. Например, один из
примеров конфигураций в этом документе может быть изменен
следующим образом:
[/dev/cd0]
Callout =
CD_MEDIA_IOBLK
Argument =
1000,2000
Priority = 11,9
Start Rule =
DISC_INSERTED
[DISC_INSERTED]
Match Rule =
DVD_OR_CD
Устройство
смены
компакт-дисков
с встроенным аппаратно-программным обеспечением
Для
обнаружения событий вставки устройства смены компакт-дисков
под управлением встроенного микропрограммного обеспечения
(например, FJ-10) не следует использовать встроенные вызовы
обнаружения MCD. Уведомление о вставке следует инициировать
непосредственно из стека контроллера устройства смены
компакт-дисков.
Все
встроенные вызовы обнаружения устройств выполняют
определенные задачи внутренними средствами, а затем
записывают имя устройства в специальную запись /dev/mcd/.insert. Это
поведение означает, что для обнаружения носителя
медиаинформации для устройств под управлением встроенного
аппаратно-программного обеспечения необходимо выполнить
следующие шаги:
-
В
драйвере устройства ожидается загрузка устройства смены
компакт-дисков и его доступность в системе.
-
Если
устройство
смены компакт-дисков доступно, в контрольную точку MCD
записывается его имя (в виде строки, например /dev/cd0).
Запись имени устройства в контрольной точке инициирует
последующие операции процесса обнаружения контента.
В
конфигурационном файле соответствующая запись устройства
будет выглядеть следующим образом (обратите внимание, что
опция Callout= в
данном случае не указана):
[/dev/cd0]
Priority = 11
Start Rule = ...
Код уведомления о
вставке в драйвере:
int notify;
notify =
open("/dev/mcd/.insert", O_WRONLY);
write(notify,
"/dev/cd0", 8);
close(notify);
Аналогичный код
для обработки операций извлечения можно записать в /dev/mcd/.eject.
Использование
MCD в качестве перечислителя разделов
Правило
MCD MOUNT_FSYS можно использовать, для того чтобы
определить, выполнено ли перечисление разделов устройства
(USB-накопителя). Если устройство не разбито на разделы, то
эта возможность позволяет смонтировать файловую систему на
устройстве без разделов.
Для
определения, выполнено ли разбиение устройства на разделы,
используется следующая конфигурация:
-
Перечислитель
USB-устройств
должен быть настроен на запуск devb-umass с
опцией blk auto=none;
таким образом, автоматическое перечисление разделов не
выполняется.
-
Правило
устройства
MCD для USB-накопителя должно быть сконфигурировано
следующим образом:
-
правило
имеет формат [/dev/umass*], т.е.
шаблон должен соответствовать как устройству без
разделов, так и любым разделам;
-
в
качестве опции Start
Rule=
определено правило, вызывающее MOUNT_FSYS.
-
Для
продолжения обработки после монтирования файловой
системы из раздела или устройства следует создать набор
правил точки монтирования второй фазы [/fs/usb*].
Правило
mcd.mnt,
используемое MOUNT_FSYS, должно включать следующий код:
/dev/umass[0-9]*
/
enum
/dev/umass[0-9]*
/fs/usb%#
dos
/dev/umass[0-9]*t1[124]
/fs/usb%#
dos fsi=use
/dev/umass[0-9]*t[146]
/fs/usb%#
dos
Поток управления
для этой конфигурации выглядит следующим образом:
-
USB-накопитель
вставлен.
-
Перечислитель
USB
обнаруживает событие вставки и запускает devb-umass.
-
devb-umass
создает путевое имя /dev/umassX и
вызывает MCD.
-
MCD
выполняет правило MOUNT_FSYS.
-
Если
носитель
не разбит на разделы:
-
Выполняется
правило
enum, которое завершается неуспешно.
-
После
неуспешного выполнения кода предпринимается попытка
монтирования fs-dos на
устройстве без разделов, которая завершается
успешно, и создается /fs/usb*.
-
Если
носитель
разбит на разделы:
-
Правило
enum перечисляет разделы и, таким образом,
завершается успешно, вызов также завершается.
-
В
результате перечисления появляются имена /dev/umassXtN,
повторно вводится правило устройства MCD с шаблоном,
пропускающим правила enum, и вместо этого
предпринимается попытка монтирования fs-dos в
разделе, что приводит к созданию /fs/usb*.
-
После
любого
из последних действий (5 или 6) MOUNT_FSYS успешно
выполняет монтирование, и MCD продолжает выполнение
правил /fs/usb*,
обычно для обнаружения контента или вызова фиктивного
правила INSERT.
Примечание.
X обозначает номер диска (0, 1, 2 и т.д.), а N
– тип раздела (4, 11, 12 и т.д.) например, /dev/umass[0-9]*
или /dev/umass[0-9]*t1[124]. Таким
образом, путь со значением umassX
относится к устройству, а путь с umassXtN
– к разделу.
Примеры:
Пример
конфигурационного файла MCD для компакт-диска:
# Примеры правил
идентификации CD/DVD-диска.
[/dev/cd0]
Callout =
CD_MEDIA_IOBLK
Argument =
1000,2000
Priority = 11,9
Start Rule =
DVD_OR_CD
[DVD_OR_CD]
Callout =
DVD_OR_CD
Match Rule =
DVD_AUDIO
Fail Rule =
CD_AUDIO
[DVD_AUDIO]
Callout =
FNAME_MATCH
Argument =
/AUDIO_TS/AUDIO_TS.IFO
Match Rule =
DVD_VIDEO
Fail Rule =
DVD_VIDEO
[DVD_VIDEO]
Callout =
FNAME_MATCH
Argument =
/VIDEO_TS/VIDEO_TS.IFO
Fail Rule =
VIDEO_CD
[CD_AUDIO]
Callout = CD_AUDIO
Match Rule =
VIDEO_CD
Fail Rule =
VIDEO_CD
[VIDEO_CD]
Callout =
FNAME_MATCH
Argument =
/VCD/INFO.VCD,/MPEGAV/AVSEQ01.DAT,/MPEGAV/MUSIC01.DAT
Fail Rule =
SVIDEO_CD
[SVIDEO_CD]
Callout =
FNAME_MATCH
Argument =
/SVCD/INFO.SVD,/MPEGAV/AVSEQ01.MPG,/MPEG2/AVSEQ01.MPG
Fail Rule =
MIXED_AV
[MIXED_AV]
Callout =
FNAME_PATTERN
Argument =
*.MP3,*.mp3,*.WMV,*.wmv,*.WMA,*.wma,*.AAC,*.aac,*.JPG,*.jpg,*.MPG,*.mpg
Отдельное
устройство /dev/cd0 контролируется
встроенной подпрограммой CD_MEDIA_IOBLK():
-
При
вставке носителя процесс обнаружения контента начинается
с правила DVD_OR_CD.
-
Если
для
правила обнаружено соответствие (носитель является
DVD-диском), то процесс переходит к правилу DVD_AUDIO.
Если соответствие правилу не обнаружено, то процесс
переходит к правилу CD_AUDIO.
Правило
DVD_AUDIO
предполагает (после выполнения встроенного теста
FNAME_MATCH) существование на DVD-диске файла /AUDIO_TS/AUDIO_TS.IFO,
что указывает на наличие звукового контента.
-
Поскольку
на
DVD-диске может находиться как звуковой, так и
видеоконтент, в любом случае выполняется переход к
правилу DVD_VIDEO.
Это поведение
аналогично поведению правила CD_AUDIO, поскольку
компакт-диск может содержать как аудиофайлы, так и данные.
Правила
определения контента компакт-диска, например VIDEO_CD или
SVIDEO_CD, имеют только ветвь "Fail", поскольку обнаружение
соответствия на этих уровнях исключает наличие любого
другого контента. При обнаружении соответствия для этих
правил, процесс обнаружения контента останавливается.
На этапе
выполнения обнаружения контента создаются уведомления для
всех клиентов, связанных с правилами, для которых обнаружены
соответствия. Вставленный компакт-диск может соответствовать
нескольким правилам или не соответствовать ни одному
правилу: например, аудиодиск расширенного формата с
видеоклипом может соответствовать правилам CD_AUDIO и
MIXED_AV, а резервная копия системы разработки программ не
будет соответствовать ни одному из правил.
Пример
двухфазного монтирования файловой системы
Пример
конфигурационного файла для USB-устройств (в нем определен
вызов devb-umass
blk auto=partition disk name=umass
внешним перечислителем USB-устройств в ответ на операции
вставки):
[/dev/umass*t*]
Callout =
PATH_MEDIA_PROCMGR
Argument =
/proc/mount
Priority = 11,10
Start Rule = MOUNT
[MOUNT]
Callout =
MOUNT_FSYS
Argument =
/dev/shmem/mcd.mnt
[/fs/usb*]
Callout =
PATH_MEDIA_PROCMGR
Argument =
/proc/mount
Priority = 11,10
Start Rule =
MIXED_AV
[MIXED_AV]
Callout =
FNAME_PATTERN
Argument =
*.MP3,*.mp3,*.WMV,*.wmv,*.WMA,*.wma,*.AAC,*.aac,*.JPG,*.jpg,*.MPG,*.mpg
Обратите
внимание, что шаблон устройства в приведенном выше примере
не подходит для устройства без разделов и применяется только
к записям разделов. Конфигурация монтирования /dev/shmem/mcd.mnt
содержит следующий код:
/dev/umass*t1[124]
/fs/usb%# dos
/dev/umass*t[146]
/fs/usb%# dos