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