Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Шрифт:
Поиск администратора процессов
Теперь, когда мы знаем основные этапы поиска конкретного администратора ресурса, осталось раскрыть тайну поиска администратора процесса, с которого все начинается. На самом деле все очень просто. По определению, администратору процессов соответствует дескриптор узла 0 (то есть текущий узел), идентификатором процесса 1 и идентификатор канала 1. Так что администратор процессов всегда идентифицируется триплетом ND/PID/CHID, равным 0/1/1.
Обработка каталогов
Пример, рассмотренный выше, относился к администратору последовательного порта. Мы также высказывали предположение, что хотим
Предположим, у меня есть код, который делает следующее:
Напомним, что функция fopen в конечном счете вызывает функцию open, так что реально мы имеем функцию open, запрашивающую имя пути
Пространство имен путей в QNX/Neutrino.
Однако, из рисунка видно, что модуль
А что произошло бы, если бы мы попытались сделать так?
Ну, поскольку у администратора последовательного порта не установлен флаг каталога, администратор процессов увидит эта и скажет: «Опаньки, извините,
Из параметров функции open в примере выше видно, что может показаться заманчивой идеей позволить некоторым «традиционным» устройствам открываться с дополнительными параметрами, указываемыми после «обычного» имени. Однако, эмпирическое правило здесь такое: если это пройдет на совещании по организации проекта, тогда вперед. Некоторые из моих студентов, услышав это от меня, заявляют: «Так я и есть сам себе комитет по проектным решениям!» На что я обычно отвечаю. «Пистолет у вас есть. Прострелите себе ногу. :-)»
Объединенные файловые системы
Взгляните повнимательнее на уже знакомый нам рисунок.
Пространство
Обратите внимание, что ответственными за префикс «
Файловые системы с перекрытием
Предположим, что у вас очень медленное сетевое соединение, и вы смонтировали поверх него сетевую файловую систему. Вы замечаете, что некоторый файлы используются достаточно часто, и хотели бы, чтобы эти файлы неким волшебным способом «кешировались» на вашей машине, но увы и ах, проектировщики сетевой файловой системы это почему-то не предусмотрели. И тогда вы решаете самостоятельно написать кеширующую файловую систему (назовем ее, например,
Обе файловые системы,
Предположим, что ваша система только что стартовала, и в вашей кэшированной файловой системе еще ничего нет. Клиентская программа пробует открыть какой-нибудь файл — скажем
Клиентский вызов open выполняет свои обычные действия:
1. Спрашивает администратор процессов: «К кому обратиться по поводу файла
2. Получает ответ от администратора процессов: «Поговори сначала с
Обратите внимание, что здесь администратор процессов возвращает две четверки ND/PID/CHID/handle — одну для файловой системы
Далее функция open делает следующее:
1. Направляет сообщение файловой системе
2. Получает ответ от файловой системы
Здесь становится ясно, что с администратором файловой системы