Linux中的打印程序有两种,一种是系统打印,也就是lp命令(一般系统配置好打印机以后,这个命令就可以直接使用),要求打印机直接接在装有Linux系统的机器上,另一种是终端打印,就要要求打印机是接在终端的串口上.
那么lp是系统自带的,我们可以简单地使用system("lp filename");就可以实现打印机打印文件了
另外一种需要我们自己再写一个程序,这个程序可以是sh,也可以是C语言:
sh程序:比如locp.sh
if [ $# = 0 ]
then
exit -1 /*如果参数为0个,直接退出*/
else echo "/033[5i" /*打开这个端口,很什么打印机无关,一般打印机端口都是这个*/
cat $* /*显示文件名,其实就是在这个端口显示这个文件,打印机就会自动打印了*/
echo "/033[4i" /*关闭端口*/
exit 0 /*正常退出*/
fi
C程序:比如locp.c (时间仓促,格式未整理,注释未加,未测试)编译使用: cc -o locp locp.c
#include
#include
#include
int main ( int argc ,char * argv [])
{
FILE *rpt_ptr;
FILE *print_ptr;
char buf[10240];
char v_begin[]= "^[[5i";
char v_end[] = "^[[4i";
int num =0;
if ( argc != 2 )
{
printf("Usage : locp filename /n");
return -1;
}
print_ptr = fopen ( "/dev/tty","wt");
if ( print_ptr == NULL )
{
printf("打开终端失败./n");
exit -1;
}
rpt_ptr = fopen ( argv[1],"rt");
if ( rpt_ptr == NULL )
{
printf("文件 %s 不存在或没有读权限 /n",argv[1]);
fclose(print_ptr);
exit -1;
}
fputs ( v_begin,print_ptr);
while (fgets(buf,10240,rpt_ptr) != NULL)
{
/*
if ( num > 20 )
{
fputs ( v_end,print_ptr);
fflush(print_ptr);
sleep(10);
fputs ( v_begin,print_ptr);
num =0;
}
num ++;
*/
num = strlen ( buf );
/*
if ( buf[num - 1] == '^M' )
{
buf[num-1] = '/0';
}
*/
fputs ( buf,print_ptr);
fflush(print_ptr);
}
// fputs ( "^L",print_ptr);
fputs ( v_end,print_ptr);
fflush(print_ptr);
fclose(rpt_ptr);
fclose(print_ptr);
return 0;
}
c程序中使用system("locp filename");即可