Specifications
3-13
Spooler Overview
argv[0] is the name of the backend itself, as usual. Note that the –Pasc, which specifies the
queue name, was parsed out of the original argument vector, as were the –C and – N3 flags
and arguments.
piobe uses the argv[] values to construct a pipeline of filters that must be executed to
process the job as requested. After determining the structure of the pipeline, piobe passes
the structure to a shell for realization. If the file parameter in the /etc/qconfig entry for this
queue exists, piobe will open the stdout of the last process in the pipeline onto the value
specified by the file parameter. The last process in the pipeline is not prevented from
re–opening stdout onto some other file or device.
Note the parent–child relationship among these processes, which is not apparent from the
figure:
• qdaemon is the parent of piobe.
• piobe is the parent of the shell.
• The shell is the parent of pioout, the last process in the pipeline before the device driver
is accessed. pioout is called the Interface Program for Use With the Device Driver or the
device driver interface program.
• pioout is the parent of pioformat.
• pioformat dynamically loads and links the device–dependent code at runtime; hence the
device–dependent code does not appear as a process in the operating system’s process
table.
• pioformat is the parent of the optional filter (if it exists), such as the pr filter.
An optional filter, such as pr, can be specified on the command–line (or hard–coded in the
colon file) to perform pre–filtering on the job before pioformat processes it.
pioformat is known as a device–independent formatter driver. It will dynamically load, link,
and drive various device–dependent formatters to process jobs of a specific data stream
type (for example, Postscript, ASCII, GL, or PCL).
Device–dependent code is designed to handle the unique properties of combinations of
specific data streams and physical printers. Because combinations of data stream types and
printers can be grouped into classes with common attributes, there are currently less than
20 device–dependent modules. These modules are loaded, linked, and driven by pioformat
at run time.
pioout is the end of the job–processing pipeline, and is called the device driver interface
program. The function of pioout is to take the processed data stream and deliver it to the
device for which it was intended, generally a printer. In the typical local print queue
environment, it is pioout that has its stdout opened onto the character special file in the
/dev directory, as specified by the file parameter in /etc/qconfig.
This is the character special file in the /dev directory that provides access to the device
driver for the printer hardware.