使用mac中的fstream c ++打印到网络打印机

时间:2012-03-20 22:04:11

标签: c++ macos

我希望从我的c ++代码(我用xcode 4编码)直接将一些文本打印到网络打印机。我知道unix上的所有内容都是一个文件,并且相信使用c ++中的fstream方法将文本重定向到打印机设备文件是不可能的。唯一的问题是我不知道与我的网络打印机关联的/ dev中的设备文件。

  1. 是否可以使用fstream方法实现打印?像

    这样的东西
    std::fstream printFile;
    printFile.open("//PATH/TO/PRINTER/DEV", std::ios::out);
    
    printFile << "This must go to printer" << std::endl;
    printFile.close();
    

    如果是这样的话

  2. 如何获取/ dev对应于特定打印机的文件?

  3. 提前致谢, NIKHIL

1 个答案:

答案 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数据,最好以最便宜的方式测试,以确保打印系统按预期工作。