Flujo de datos spooler (mandato enq)

Los mandatos lp, lpr, qprty enq se pueden utilizar para someter un trabajo al spooler para su proceso.

El mandato enq es el punto de entrada verdadero para el spooler; lp, lpry qprt todos analizan sus propios argumentos y componen una llamada a enq. Esto se puede demostrar ejecutando los pasos siguientes como usuario root en un indicador de shell:

  1. Especifique mount /bin/echo /bin/enq.
  2. Especifique qprt -Pasc -fp -z1 -p12 -s courier -C -N 3 /etc/motd.
  3. Especifique umount /bin/enq.

El mandato qprt del paso 2 intenta someter un trabajo de impresión al spooler y hacer que se coloque en la cola denominada asc, solicitando tres copias del mensaje del día en un font Courier de 12 puntos rotado 90 grados. qprt analiza sus argumentos de línea de mandatos y crea un vector de argumento para pasarlo a enq. Cuando el mandato qprt intenta invocar enq con el vector de argumento, invoca en su lugar el mandato echo , que se monta sobre el mandato enq . Por lo tanto, el vector de argumento generado por el mandato qprt se pasa al mandato echo , que a su vez simplemente se hace eco del vector de argumento en la visualización. Este procedimiento también funcionará con lp y lpr . Aparte de demostrar que qprt es realmente un componente frontal de enq, esta técnica también es útil cuando intenta averiguar cómo obtener distintivos no soportados en el spooler. Consulte Filtros para obtener más información.

La ejecución del mandato qprt en el paso 2 debe hacer que la salida siguiente se grabe en el elemento de visualización especificado por la variable de entorno TERM :

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

Este es el vector de argumento generado por esta instancia específica del mandato qprt . Si echo no se hubiera montado sobre enq, se habría ejecutado el siguiente mandato de envío de trabajos:

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

Un mandato de sometimiento de trabajos debe finalizar con el nombre de uno o más archivos reales que existen en un sistema de archivos al que puede acceder el sistema operativo base. Esto es cierto incluso cuando la cola está configurada para manejar trabajos que no sean trabajos de impresión.

Nota: Asegúrese de que ejecuta el paso 3. De lo contrario, el spooler se inhabilitará.

Cuando se ejecuta el mandato enq , ya sea directamente o mediante lp, lpro qprt, asigna un número de trabajo al trabajo. De forma predeterminada, lp devolverá el número de trabajo. lpr y qprt no devolverán el número de trabajo a menos que lo solicite específicamente con un distintivo.

enq crea un JDF y lo coloca en /var/spool/lpd/qdiry, a continuación, escribe el nombre del JDF en una cola de mensajes y señala al qdaemon (enviándole un SIGUSR2) que existe un nuevo JDF. A continuación, el qdaemon lee el nombre del JDF de la cola de mensajes, accede al JDF directamente y lee los datos contenidos en el JDF en una estructura de datos interna que mantiene para realizar un seguimiento de todos los trabajos actualmente en el spooler. En este momento, el trabajo ha sido aceptado por el spooler.

Se crea un JDF para todas las operaciones del sistema de spooling que no sean una consulta de estado de cola; la estructura de un JDF difiere entre solicitudes de impresión frente a solicitudes de cancelación de trabajos frente a solicitudes de control de cola, y así sucesivamente, pero se crea un JDF sin embargo. Los mandatos con la misma función que lpstat todavía llaman a enq para realizar su trabajo, pero ni se crea un JDF ni está implicado el qdaemon .

Cuando el qdaemon determina que el dispositivo en el que está en cola el trabajo está disponible, el qdaemon invoca el programa de fondo para la cola, pasando los argumentos especificados por el JDF. El programa de fondo procesa el trabajo.