C++ Linux:OpenPrinter 等价物

Posted

技术标签:

【中文标题】C++ Linux:OpenPrinter 等价物【英文标题】:C++ Linux: OpenPrinter equivalent 【发布时间】:2015-09-11 08:17:03 【问题描述】:

我正在使用 Qt。我需要直接在我的打印机上写一些文本。在 Windows 上,我可以使用 winapi OpenPrinter 和 WritePrinter 执行此操作,但我需要此代码才能在 linux 上运行,但我在 linux 上找不到此功能 OpenPrinter。我知道我可以像这样直接写入 linux /dev/usb/lpX 文件:

char *dev = "/dev/usb/lp0";
int printerfile = open(dev, O_RDWR | O_NOCTTY | O_NDELAY) ;
if (printerfile < 0)

        cout << "Failed to open "<<dev;
        exit(-1);

string str = "test 12345";
write(printerfile,str.c_str(),str.length());

但这需要像 /dev/usb/lp0 这样的设备路径,而我只能从 Qt 中获取打印机名称,如 EPSON LX-300+。

【问题讨论】:

您不想直接打开打印机。不一定有一个连接到机器上。许多打印机是联网的。为什么不像一个守法的 Qt 公民那样使用 QPrinter,而不必担心特定于操作系统的东西呢?做不到这一点,使用 CUPS 接口(基本上,运行lp)。 ***.com/questions/11397683/… @n.m.我已经尝试过了,但是这个 QPrinter 在打印机点阵 ***.com/questions/32310797/… 上是错误的 @SimonKraemer ***.com/questions/32310797/… 【参考方案1】:

您可以尝试通过命令了解有关您的 Linux 操作系统附加打印机的更多信息:

[udevadm info -q all -n /dev/usb/lp0]

输出如下:

-------------
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-
1.2:1.0/usbmisc/lp0
N: usb/lp0
E: DEVNAME=/dev/usb/lp0
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-
1.2:1.0/usbmisc/lp0
E: MAJOR=180
E: MINOR=0
E: SUBSYSTEM=usbmisc
E: UDEV_LOG=3
-------------

【讨论】:

以上是关于C++ Linux:OpenPrinter 等价物的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上使用纯 C 项目中用 C++ 编写的库?

Windows 上的 WaitOnAddress() 在 Linux 上的完全等价物是啥?

是否有 Linux 等效的 SetupDiGetClassDevs 函数

pyQT slot decorator 啥是 C++ 等价物

C++ 中的 Java HashSet 等价物

C# 中的 C++ 内存复制等价物