用終端打印機(jī)打印Unix文件
Unix系統(tǒng)提供了一個文件打印命令LP,格式為:LP文件名,功能是將指定文件在缺省的系統(tǒng)打印機(jī)上打印出來。系統(tǒng)打印機(jī)通常指主機(jī)LP0或LP1打印口連接的并口打印機(jī),Unix OpenServer5.0通過Scoadmin→Print設(shè)置選單命令來設(shè)定。 在一些情況下,我們經(jīng)常遇到需要在主機(jī)的某一或任一終端的打印機(jī)上完成文件打印,但Unix系統(tǒng)并沒有提供實(shí)現(xiàn)這一功能的現(xiàn)成命令。通過Scoadmin→Print設(shè)置選單命令,可以將缺省的打印機(jī)定義到某個終端上。但實(shí)際情況是:第一,要進(jìn)入超級用戶才能設(shè)定,設(shè)定后系統(tǒng)要重啟,打印機(jī)被固定在某一終端上。第二,這個設(shè)定其實(shí)根本實(shí)現(xiàn)不了打印,用LP方式打印文件時,只將文件送到設(shè)定的終端上顯示,絲毫不能使終端打印機(jī)動作一下。 怎樣才能方便地在主機(jī)任一終端打印機(jī)上實(shí)現(xiàn)文件打印功能呢?下面的小程序可以達(dá)到這個目的。假定程序名為Ep,程序如下: ls$1〉TERMPPlist list=′cat TERMPPlist awk′{print$1}′′ for fl in$list do sleep 1 stty ixon ixoff opost-ixany echo″33[5i″ cat$fl echo″33[4i″ sleep 1 done 使用格式:Ep文件名〉/dev/ttyxx 例如,要將文本文件Sal.txt在/dev/tty25h終端打印機(jī)上打印出來,只需執(zhí)行如下命令: Ep Sal.txt〉/dev/tty25h 需要解釋的是: 1.033[5i、033[4i是通用終端打印功能控制代碼ESC[5i、ESC[4i,如國光CJ320H終端。具體可參閱相應(yīng)終端隨機(jī)使用手冊。 2.這是在終端的并口打印機(jī)上實(shí)現(xiàn)的,所以,終端設(shè)置選單要設(shè)置成并口打印機(jī)和正確的打印機(jī)類型。如何實(shí)現(xiàn)串口打印機(jī)打印需參閱終端隨機(jī)使用手冊的打印功能控制代碼。 3.打印過程不在終端上顯示,即打印過程不影響終端顯示。利用不同的控制代碼也可以實(shí)現(xiàn)同時顯示。 要特別注意的是: 設(shè)置終端與主機(jī)通訊方式時,一定要設(shè)置成“限制發(fā)送”。如國光CJ320H設(shè)置選單中就有此功能。否則,打印機(jī)打印出的文件(特別是字節(jié)數(shù)較大的文件)有可能隨機(jī)一截一截地丟失。原因很簡單:終端和打印機(jī)忙且緩沖滿時,來不及接收和處理主機(jī)發(fā)來的文件數(shù)據(jù),而主機(jī)并沒有得到終端和打印機(jī)忙而拒絕接收數(shù)據(jù)的稍等信號,將文件數(shù)據(jù)照發(fā)不誤,造成數(shù)據(jù)丟失。 另外,用Split命令可實(shí)現(xiàn)文件的分段打印。如用以下三條語句替換前面的第一條語句,可實(shí)現(xiàn)對文件的每100行分段打印。 rm TERMPP*2〉/dev/null split-100$1TERMPP 2〉/dev/null lsTERMPP*〉TERMPPlist 2〉/dev/null 該程序?qū)υ赨nix系統(tǒng)主機(jī)任一終端打印機(jī)上實(shí)現(xiàn)文件的打印非常靈活、方便。
