时间: 2010-12-24
我们把创建临时文件的工作并入unix2dos.pl程序中。新的程序称为lp.pl:
#!/opt/bin/perl
# open standard input
open(FOO, "-");
# create temp file for writing
open(OUT, "$#@62;/var/spool/lp/save_dir/tmp/$ARGV[0].$");
# if input stream is binary do not filter
if ( -B FOO) {
while () {
print OUT
用lpadmin打印多种内容形式 - 编程入门网 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
用lpadmin打印多种内容形式 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
;
}
}
# else filter the line unix2dos style
else {
while () {
s/\n/\r\n/; print OUT;
}
}
close(FOO);
close(OUT);
# send print request
system("/bin/lp -s -d $ARGV[1] /var/spool/lp/save_dir/tmp/$ARGV[0].$");
下一步,我们向lp.pl传递两个参数:${request_id}, 和网络打印机。这个程序生成一个名字为:
${request_id}."进程的pid号"的过滤后的临时文件,并lp这个临时文件。然后,我们把过滤队列界面文件中的:
FILTER=/opt/utils/unix2dos.pl | lp -s -d no1316p-r
这一行,替换成:
FILTER="/var/spool/lp/save_dir/sbin/lp.pl ${request_id} no1316p-r"
让我们总结一下到了现在会发生什么:
用户(dlister)从客户机器发送一个lp作业:lp -d no1316p /var/adm/messages
打印服务器接受该作业,通过过滤队列处理这个请求
过滤队列记录当前的作业号(${request_id}),用户(dlister),以及文件名(/var/adm/messages)
输入送到lp.pl程序,该程序创建一个临时文件,并利用网络打印机队列执行一个lp命令。
到此,如果在网络打印机上执行lpq,结果会如下:
$ lpq -Pno1316p-r
Rank Owner Job File(s) Total Size
active lp 1629 /var/spool/lp/save_dir/tmp/no1316p-1625.2974 536 bytes
用lpadmin打印多种内容形式(6)
时间: 2010-12-24
现在,我们只需要一个程序来索引log文件,找到no1316p-1625,然后返回初始的所有者和文件名。我们写了如下程序:
#!/bin/ksh
typeset -i N
typeset -i N2
# set N2 equal to the default number of fields per log file entry
N2=3
if [ $# -ne 1 ]
then
echo "usage: $0 network_printer_queue"
exit 1
fi
echo "Rank Owner Job File(s) Total Size"
/usr/ucb/lpq -P $1 | grep bytes | while read line
do
RANK=`echo $line | awk "{print $1}"`
JOB=`echo $line | awk "{print $3}"`
SIZE=`echo $line | awk "{print $5}"`
TEMP=`echo $line | awk "{print $4}"`
GREPSTUFF=`basename $TEMP | awk -F. "{print $1}"`
OWNER=`grep -w $GREPSTUFF /var/spool/lp/save_dir/logs/request.log \
| awk "{print $2}"`
# count the number of fields in the log file: 3 means a single file
# printed more than
# 3 means that several files were sent at once.
N=`grep -w $GREPSTUFF /var/spool/lp/save_dir/logs/request.log \
| awk "{print NF}"`
if [ $N -gt 3 ]; then
FILE=`grep -w $GREPSTUFF /var/spool/lp/save_dir/logs/request.log \
| awk "{print \\$N2}"`
echo "$RANK $OWNER $JOB $FILE $SIZE bytes"
N2=N2+1;
else
N2=3
FILE=`grep -w $GREPSTUFF /var/spool/lp/save_dir/logs/request.log \
| awk "{print $3}"`
echo "$RANK $OWNER $JOB $FILE $SIZE bytes"
fi
done
这段程序只要一个参数:打印服务器队列的名字。在我们的例子中,我们只需要输入 $ lpq.ksh no1316p-r 就可以显示以下结果:
Rank Owner Job File(s) Total Size
active dlister 1629 /var/adm/messages 536 bytes
用lpadmin打印多种内容