假脱机程序数据流:命令和后端

有四个命令可以用于将作业提交到基本操作系统假脱机程序。 它们是 lplprqprtenq

每条命令都有特定的 UNIX 起源:"lp起源于 AT&T System V,"lpr起源于 BSD,而 "qprt和 "enq都起源于基本操作系统。

虽然用户可以使用这四个命令中的任意一个命令将作业提交到假脱机程序,但到假脱机程序真正的入口点是 enq 命令。 所有 lplprqprt 都是 enq. lplprqprt 的前端,它们都解析其自变量并组成对 enq的调用。 这些前端在运行方式和它们接受的标志的数量和类型上都不相同。

当作业提交给假脱机程序时,enq 将处理作业请求。 如果作业请求有效,这基本意味命令语法是正确的,那么该作业将被放到队列中。 enq 会创建一个作业描述文件(JDF)并通知 qdaemon 新 JDF 的存在。

qdaemon 读取每个新的 JDF 并读取 JDF 指定的作业参数,然后保存为它所维护的用来跟踪作业请求的内部数据结构。 qdaemon 使用队列状态信息来跟踪每个队列的状态,当情况合适时将调用队列的后端来处理作业。

队列的后端精确地确定了如何处理放在该队列上的作业。 允许用户将作业提交到假脱机程序的命令可以指定一些请求对作业进行某种处理的标志,qdaemon 可以确定哪个作业得到处理(下一个最短的作业还是先来先服务),但是只要涉及到处理作业,那么后端是实际完成所有工作的进程。 (系统管理员可以读取 /etc/qconfig 中的节,并简单地通过检查后端来快速确定给定队列的功能。)

下图显示了两个最常见的后端环境:本地打印机队列和远程打印机队列。 本地队列将 piobe(打印机 输入/输出后端)作为后端使用。 远程打印机队列使用 rembak(远程后端)作为后端。

piobe 与所有后端一样,由 qdaemon 调用。 piobe 设置并控制一系列程序(管道),这些程序不仅能对打印作业执行扩展操作,还可以将大量的控制数据发送到打印机,例如,将打印机初始化为一个特定模式,然后再将已处理的作业传递到打印机。 piobe 最先开始使用存储在打印机冒号文件中的数据。 管道中由 piobe 设置并控制的最后的程序负责管道中先前生成的字节流的物理传递。 在本地队列的环境中,该程序打开一个设备驱动程序,该驱动程序将字节流传递到本地连接的打印机(串行连接或并行连接),或传递到与网络连接的打印机。

图 1。 使用基本操作系统打印
使用基本操作系统打印

当远程打印机队列仅指向另一个主机上的队列时,rembak 是公共后端,更普遍的称谓是打印服务器。 piobe 可以对打印作业执行扩展操作,而 rembak 仅将作业通过 TCP/IP 网络 传送到打印服务器。 如“使用基本操作系统打印”图所示,如果打印服务器是另一个基于基本操作系统的机 器,那么 rembak 通过网络将作业传递到 lpd 进程,接着该进程 调用 enq,而 enq 将创建一个 JDF 等等,与上面所述的一样。