Users can use commands, including the smit interface, to submit one type of job or another to the spooler. Each of these commands, with the exception of queues status queries, calls the enq command which creates a job description file (JDF); the queue status queries call enq but do not create a JDF.
The enq command notifies the qdaemon of the existence of a new JDF. The qdaemon reads the JDF and begins the process of attempting to acquire all of the resources necessary to process the job. When the qdaemon has acquired those resources , it uses the fork and exec subroutines to set the queue backend into execution. The qdaemon passes the backend all of the relevant arguments from the original job submission command as well as an open file descriptor (from the file parameter in /etc/qconfig) to the backend.
In the case of a spooler queue where the backend is piobe, piobe uses the name of the queue to access the virtual printer definition for this queue, determining the full path to all of the processes that will become the pipeline of filters that actually processes the spooler job. This pipeline is passed to a shell for realization.
In the case of piobe, the pipeline can begin with an optional pre-filter, such as the pr command. The output from the pr command becomes the stdin of the formatter driver, pioformat, which dynamically loads, links, and drives the formatter. The output from pioformat becomes the stdin of pioout. pioout uses the open file descriptor passed by the qdaemon to deliver the processed spooler job to the device driver, a character-special file in the /dev directory. If no pre-filter is specified, pioformat becomes the first process in the pipeline.
The following figure illustrates this high-level flow of a spooler print job through the base operating system spooler.
Figure 3-3. Spooler Data Flow Summary