我希望从我的c ++代码(我用xcode 4编码)直接将一些文本打印到网络打印机。我知道unix上的所有内容都是一个文件,并且相信使用c ++中的fstream方法将文本重定向到打印机设备文件是不可能的。唯一的问题是我不知道与我的网络打印机关联的/ dev中的设备文件。
是否可以使用fstream方法实现打印?像
这样的东西std::fstream printFile;
printFile.open("//PATH/TO/PRINTER/DEV", std::ios::out);
printFile << "This must go to printer" << std::endl;
printFile.close();
如果是这样的话
如何获取/ dev对应于特定打印机的文件?
提前致谢, NIKHIL
答案 0 :(得分:0)
在串行打印机的时代,可以直接打开和写入文件;然而,这不是今天的方法。
CUPS守护程序在OS X和许多其他Unix系统上提供打印排队,调度和管理接口。您可以使用lp(1)
或lpr(1)
命令打印文件。 (不同的命令来自Unix系统中多年来可用的不同版本的打印假脱机程序;一个来自BSD源,另一个源自AT&amp; T源。为了兼容性,CUPS提供两个程序。)
你可能可以通过popen(3)
实现类似的目标。在shell中,它类似于:
echo hello | lp -
-
表示要从标准输入打印。
我没有对此进行测试,但popen(3)
等价物可能如下所示:
FILE *f = popen("lp -", "w");
if (!f)
exit(1);
fprintf(f, "output to the printer");
我建议首先在shell上测试一些输入,以确保CUPS准备好处理您要发送的内容的格式。您可能需要使用CRLF而不仅仅\n
来终止行,否则打印机可能会“逐步”输出。或者,如果您要发送PDF或PS或PCL数据,最好以最便宜的方式测试,以确保打印系统按预期工作。