Файл /etc/qconfig играет наиболее важную роль в домене программы буферизации по следующим причинам:
Файл /etc/qconfig содержит описания всех очередей в базовой операционной системе; очередь - это упорядоченный список с именем, содержащий запросы к указанному устройству. Устройством (аппаратным или программным) называется любой объект, который может последовательно выполнять эти запросы. Очередь обеспечивает последовательный доступ к устройству. Каждую очередь должно обслуживать по крайней мере одно устройство; иногда на одну очередь приходится несколько устройств.
Демон qdaemon считывает версию файла /etc/qconfig в формате ASCII и создает его двоичную версию - /etc/qconfig.bin. Для того чтобы демон qdaemon мог анализировать файл /etc/qconfig, файл должен быть записан в специальном формате. Ниже приведены подробные примеры структуры файла /etc/qconfig.
Локальная очередь имя_очереди: device = имя_устройства up = TRUE или FALSE discipline = fcfs или sjn имя_устройства: file = имя_физического_устройства или FALSE header = always или group или never trailer = always или group или never access = both или write backend = полный_путь_к_базовой_программе
Удаленная очередь имя_очереди: device = имя_устройства up = TRUE или FALSE host = имя_удаленного_хоста s_statfilter = полный_путь_к_краткому_фильтру l_statfilter = полный_путь_к_полному_фильтру rq = имя_удаленной_очереди имя_устройства: backend = полный_путь_к_базовой_программе
Файл /etc/qconfig состоит из текстовых блоков, называемых разделами. Каждая очередь представлена двумя разделами. Первый из них называется разделом очереди; второй - разделом устройства. Разделы состоят из названий и значений параметров, определяющих свойства очереди.
При анализе демоном qdaemon ASCII-версии файла /etc/qconfig первой строкой, отличной от комментария, должно быть слово с двоеточием; эта строка обозначает начало раздела очереди. Слово задает имя очереди, в которую пользователь может передавать задания печати. Следующие строки должны быть указаны с отступом. Среди них должна быть следующая строка: device = имя_устройства. Значение параметра device связывает раздел очереди с разделом устройства; других функций у этого параметра нет. Во время начальной настройки очереди значением параметра device обычно является имя принтера (например, lp1). Хотя для очереди действительно может быть назначен принтер lp1, использование имени lp1 в качестве значения параметра device означает только то, что раздел устройства будет называться lp1, не более. Это никак не связано с наличием в системе реального принтера с именем lp1.
После строк, указанных с отступом, должна следовать строка со словом с двоеточием - значением параметра device; эта строка обозначает начало раздела устройства. Слово (для пользователя оно безразлично) задает имя устройства, последовательный доступ к которому обеспечивает раздел очереди. Следующие строки должны быть указаны с отступом. Среди них должна быть следующая строка: backend =полный_путь_к_базовой_программе. В случае локальной среды буферизации, данный раздел содержит два важных параметра.
Параметр file задает имя реального устройства, последовательный доступ к которому обеспечивает данная очередь. Следует отметить, что все задания, переданные в систему буферизации, помещаются в очередь данного устройства. Если эта очередь назначена для принтера с именем lp1, то значением параметра file будет /dev/lp1. Процедуры создания очереди используют имя реального устройства в качестве имени раздела устройства по умолчанию. Помните, что оно не обязательно совпадает с именем устройства, фактически назначенного очереди.
Параметр backend задает полный путь к программе, которая обработает переданное в буфер задание после того, как демон qdaemon определит, что наступила его очередь.
Пример под названием Четыре очереди - Четыре виртуальных принтера - Один физический принтер относится к случаю, когда файл /etc/qconfig определяет четыре очереди для одного физического принтера (в данном случае - /dev/lp1). Обратите внимание, что во всех четырех парах разделов раздел очереди с разделом устройства связывает одна и та же строка - lp1. Во всех разделах устройства реальный целевой принтер для каждого задания каждой из очередей задается параметром file. В данном примере, это принтер lp1 с записью /dev/lp1 в драйвере устройства. В момент создания определений этих очередей с помощью команды smit ей была необходима связующая строка между разделами каждой пары. А поскольку в системе существовал физический принтер lp1, система применила строку lp1 и в качестве значения параметра device каждого раздела очереди, и в качестве имени каждого раздела устройства. Ниже приведены подробные примеры структуры файла /etc/qconfig.
asc: device = lp1 lp1: file = /dev/lp1 header = never trailer = never access = both backend = /usr/lib/lpd/piobe
gl: device = lp1 lp1: file = /dev/lp1 header = never trailer = never access = both backend = /usr/lib/lpd/piobe
pcl: device = lp1 lp1: file = /dev/lp1 header = never trailer = never access = both backend = /usr/lib/lpd/piobe
ps: device = lp1 lp1: file = /dev/lp1 header = never trailer = never access = both backend = /usr/lib/lpd/piobe
Каждая из этих пар разделов определяет очередь. Если в качестве базовой применяется программа piobe, то с каждой очередью связан также и виртуальный принтер. Хотя определения виртуальных принтеров можно создавать и с помощью редактора, обычно их создают одновременно с определениями очереди с помощью smit и команды piomkpq. Определения виртуального принтера не хранятся в файле /etc/qconfig. Существование виртуального принтера следует из того, что базовой программой данной очереди является piobe; его определение может располагаться в любом месте базовой файловой системы. Имя очереди служит для идентификации определения виртуального принтера и обращения к нему.
Физический принтер с именем lp1 в базовой операционной системе поддерживает по крайней мере четыре различных типа потоков данных: ASCII (asc), Эмуляцию графопостроителя (Plotter Emulation) (gl), Язык команд принтера (Printer Command Language) (pcl) и PostScript (ps). Каждая очередь вместе со связанным с ней виртуальным принтером обрабатывает один из типов потоков данных. Поэтому очередей именно четыре. Это один из основных принципов логического разделения физических и виртуальных принтеров в базовой операционной системе.
Имя очереди буферизации (имя раздела очереди) может содержать произвольное число символов, однако в ответ на запрос о ее состоянии будут показаны только первые семь символов. Длина имен устройств (имен разделов устройства) в ответах на запросы о состоянии также ограничена, но не семью, а пятью символами.
В ответ на запросы о состоянии очередей информация об удаленных очередях будет показана дважды: один раз для локальной очереди и один раз для удаленной очереди на сервере печати. Например, если в файле /etc/qconfig есть такая запись:
myps: device = @kricket up = TRUE host = kricket s_statfilter = /usr/lib/lpd/aixshort l_statfilter = /usr/lib/lpd/aixlong rq = myps @kricket: backend = /usr/lib/lpd/rembak
то команда lpstat -pmyps возвратит следующий ответ:
Очередь Устр Состояние Файлы Задания Пользоват. PP % Блоки Cp Rnk ------- --- --------- --- -------- --------- -- - ---- -- --- myps @krik ГОТОВО myps myps ГОТОВО
Здесь первая строка означает, что локальная очередь myps с разделом устройства @krik находится в состоянии ГОТОВО. Вторая строка означает, что целевая удаленная очередь myps с разделом устройства myps тоже находится в состоянии ГОТОВО. (В примере умышленно выбраны одинаковые имена для локальной и удаленной очередей буферизации. Такой прием позволяет сделать ответ на запрос о состоянии очереди более удобочитаемым.)