[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Поток данных программы буферизации. Часть II

Команды lp, lpr, qprt и enq предназначены для передачи задания на выполнение программе буферизации AIX. Фактической точкой входа для программы буферизации является команда enq; команды lp, lpr и qprt анализируют свои аргументы, а затем вызывают enq. Для того чтобы посмотреть, как работает эта схема, войдите в систему под именем root и с помощью командной строки выполните следующие действия:

  1. Введите команду mount /bin/echo /bin/enq и нажмите Enter.
  2. Введите команду qprt -Pasc -fp -z1 -p12 -s courier -C -N 3 /etc/motd и нажмите Enter.
  3. Введите umount /bin/enq и нажмите Enter.

Команда qprt, вызываемая на шаге 2, передает задание печати программе буферизации и помещает его в очередь asc, запрашивая при этом три копии "ежедневного приветствия", набранные шрифтом Courier размером 12 пунктов с поворотом на 90 градусов. Команда qprt анализирует аргументы командной строки и формирует новый набор аргументов для передачи команде enq. Когда qprt вызывает enq и передает ей этот набор аргументов, на самом деле вызывается команда echo, смонтированная вместо команды enq. Таким образом, строка аргументов, сформированная командой qprt, передается команде echo, которая выводит эту строку на экран. Аналогично можно выполнить эту процедуру для команд lp и lpr. Этот метод не только демонстрирует, что команда qprt является клиентом команды enq, но и помогает выяснить, как передать программе буферизации неподдерживаемые флаги. Дополнительная информация приведена в разделе Фильтры.

Выполнение команды qprt на шаге 2 приводит к выводу следующей строки на экран дисплея, заданного с помощью переменной среды TERM:

-P asc -o -o -f -o p -z -o 1 -o -p -o 12 -o -s courier -C -N 3 /etc/motd

Это строка аргументов, сформированная командой qprt. Если бы вместо enq не была смонтирована команда echo, то была бы запущена следующая команда передачи задания на выполнение:

enq -P asc -o -f -o p -o -z -o 1 -o -p -o 12 -o -s courier -C -N 3 /etc/motd

Команда, передающая задание на выполнение, должна оканчиваться именем одного или нескольких файлов, реально существующих в файловой системе и доступных для базовой операционной системы. Это верно не только для заданий печати, но и для заданий других типов.

Примечание: Если не выполнить шаг 3, то программа буферизации будет отключена.

При выполнении команды enq, непосредственно или с помощью команд lp, lpr или qprt, заданию присваивается номер. По умолчанию команда lp возвращает номер задания. Команды lpr и qprt не возвращают номер задания, если не указан специальный флаг.

Команда enq создает JDF в каталоге /var/spool/lpd/qdir и помещает имя JDF в очередь сообщений и передает программе qdaemon сигнал (SIGUSR2) о появлении нового JDF. Затем программа qdaemon считывает имя JDF из очереди сообщений, получает непосредственный доступ к JDF, считывает содержащиеся в нем данные и помещает их во внутреннюю структуру, предназначенную для отслеживания текущих заданий программы буферизации. С этого момента задание считается принятым программой буферизации.

JDF создается для всех системных операций буферизации, кроме запроса о состоянии очереди; структура JDF зависит от типа запроса (запрос на печать, запрос на отмену задания, запрос на управление очередью и т.д.), но JDF создается всегда. Команды, выполняющие ту же функцию, что и lpstat, также обращаются к enq, но при этом JDF не создается и qdaemon не вызывается.

Во всех версиях AIX, предшествующих версии 4, когда программа qdaemon обращается к JDF, считывает его содержимое и помещает его в упомянутую выше структуру, она присваивает заданию номер. В версии 4 номер присваивается заданию программой enq. Это изменение было внесено в систему с целью привести команду lp в соответствие с промышленными стандартами (команда lp должна возвращать номер задания, передаваемого на выполнение, независимо от того, принимает его программа qdaemon или нет). Это означает следующее. Во-первых, в AIX версии 4 заданиям больше не присваивается номер НОВОЕ, так как ранее номер НОВОЕ появлялся только после того, как команда enq создавала JDF, но до того, как программа qdaemon обращалась к JDF и присваивала заданию номер. Во-вторых, по наличию или отсутствию у задания номера больше нельзя определить, принято ли задание на обработку программой qdaemon.

После того как программа qdaemon определяет, что устройство, к которому относится данное задание, доступно, она вызывает базовую программу для соответствующей очереди и передает ей аргументы, указанные в JDF. Базовая программа выполняет задание.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]