首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>桌面应用>正文

Windows打印管理在Linux平台的实现

http://www.oklinux.cn  2006-11-21  oklinux收集整理   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

本文介绍了一种在 Linux 平台上实现 Windows 打印机管理的移植方法及具体实现细节。通过本文,读者可以了解相关技术,并把这些技术直接应用到实际软件开发中。

1.理解 Windows 打印机管理和 Linux 打印机管理

Windows 平台提供了非常简单而且完善的打印机管理系统。在 Windows 编程中,打印功能被融入了 GDI (Graphic Device Interface)模块。在 GDI 模块中,程序员只要调用 EnumPrinters() 等 APIs 就可以轻松获取打印机信息。Windows 的这种成熟打印管理机制很大程度上得益于打印机供应商所提供的完善的打印机驱动。Windows 的打印机驱动屏蔽了打印机的具体打印实现细节,同时为上层调用提供了简单的 API 接口。

与 Windows 平台相反,打印机管理机制在 Linux 平台上从产生到成熟却经过了一个漫长的过程。Linux 打印系统最早源于 UNIX 打印系统,但 UNIX 系统却一直缺乏统一的标准接口。由于历史原因,不同 UNIX 平台使用着不同的打印系统。在各种 UNIX 打印解决方案中,最流行的是 Berkeley 打印系统和 System V 打印系统。一方面,不同打印系统需要不一样的打印驱动支持;另一方面,UNIX 只拥有相对较小的客户群。这些因素使得很多打印机供应商完全放弃了对 UNIX 平台的支持。统一打印接口的缺乏和底层驱动的不完善使打印在很长一段时间内成为了 Linux 平台的一大功能漏洞。

最终 CUPS (Common UNIX Printing System)的出现解决了上述窘境。CUPS 是UNIX/Linux 上通用的打印系统。CUPS 提供了一套 CUPS API 来完成 UNIX/Linux系统和打印机之间的交互。例如,用户可以通过 CUPS 获取打印机的信息,也可以通过 CUPS 设置打印机。CUPS 提供了对 Berkeley 和 System V 打印命令的支持,这种兼容性使得之前的系统不用进行大规模修改就可被延续使用。同时,CUPS 还提供一系列模块化的过滤接口。通过这些接口,打印机提供商只需要开发一个驱动程序就可以满足所有平台的需求。至今为止,CUPS 已被所有 UNIX 和 Linux 平台所支持。

2.打印机管理移植架构

打印机管理移植是应用程序跨平台移植的重要组成部分。不同平台所支持的打印接口是不同的,因此移植的核心就是实现平台之间的打印机管理接口的转换。下图展示了打印机管理移植的架构。

图1 打印机管理移植架构

Windows 提供了一系列 API 来获取打印机信息。这些信息被封装在预定义的Windows 标准结构中,比如 DEVMODE,PRINTER_INFO_2,PRINTER_INFO_4 等等。Linux 使用 CUPS 来获取打印机信息,这些信息被封装在 cups_dest_t,ipp_attribute_t 等数据结构中。只要正确获取 Linux 平台上打印机信息,并把它们转化成 Windows 打印机数据结构,就可以完成打印机管理。

3.CUPS 基础知识

CUPS 是 UNIX/Linux 平台上的打印系统。CUPS 的定义和实现是基于 IPP(Internet Printing Protocol)协议的。IPP 是通用的打印系统标准,它的功能和操作被一系列RFC(Request for Comments)所详细定义。这些具体功能和操作包括:建立 IPP请求,应答 IPP 请求和设置 IPP 请求等等。和 IPP 相关的 RFC 包括 RFC1179,RFC2910,RFC2911,RFC3196 等等。在网络协议中,IPP 位于 HTTP(Hyper-Text Transport Protocol)协议之上。因此以下代码示例将涉及到很多 IPP 和 HTTP的系统调用,例如 ippAddString() 和 httpConnectEncrypt() 等等。此外,在UNIX/Linux 平台上在使用 CUPS 之前要提前引入下列头文件:

#include 
#include 
#include 
#include

有了上述 CUPS 基础知识,下文将举例说明使用 CUPS 实现打印机管理移植的技术细节。

4.获取打印机数量

Windows 通过 API EnumPrinters() 的返回参数 pcReturned 来获取系统的打印机数量。Windows 程序的具体实现如下所示:

int n_PrinterCount;
EnumPrinters( , , , , , , &n_PrinterCount);

在 Linux 中,CUPS 函数 cupsGetDests() 可实现同样的功能。需要注意的是,在调用结束后,调用者需要使用 cupsFreeDests() 来释放内存。

cups_dest_t *dests;
int n_PrinterCount = cupsGetDests( &dests );
cupsFreeDests(count, dests);

上一篇:Windows 打印管理在Linux 平台实现   下一篇:Linux操作系统下KDE Office套件总结

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux操作系统下KDE Office套件总结
·Windows打印机管理向Linux移植
·Windows 打印管理在Linux 平台实现
·Linux操作系统上最好的10款开源游戏
·用语言控制Linux:Linux的语音识别软件(1)
·Linux操作系统下的CAD系统详细介绍
·用语言控制Linux:Linux的语音识别软件(2)
·linux虚拟光驱介绍
·Linux操作系统下免费实用的杀毒软件
·在Linux操作系统下用Wine玩反恐精英
·关于Linux操作系统中调整刷新率解说
·浅谈Linux操作系统KDE桌面上的改进
·一起感受Linux操作系统的桌面环境
·Linux操作系统下的网络邻居软件大全
·Debian下amule
·教你在Linux操作系统下也能玩转CS
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Aurorae: KDE 4 新的窗口边框主题引擎
·Google Chrome 主题库
·Bespin-被KDE4遗忘的主题
·10 套不错的 GNOME 主题
·无人值守安装Linux系统
·巧妙管理Linux服务器存储空间
·值得期待的Fedora 11操作系统新特性简
·面对CSS跨站攻击 IE与FireFox态度不一
·网友分享:在Linux系统上玩转磁盘阵列
·Ubuntu系统技巧之登录时查看“每日一句
·专家观点:Linux系统管理学习路线图
·开源办公软件 KOffice 2.0 Beta 7 发布
  阅读排行
·linux无线网卡设置与安装
·Ubuntu多媒体播放器的安装与配置
·VNCServer 配置 及Vncview的使用
·用新型D-BUS与Linux桌面应用程序通讯
·与微软相媲美! Ubuntu v8.04组图欣赏
·10 套不错的 GNOME 主题
·如何安装和使用wine
·菜鸟也疯狂:Linux桌面应用全攻略
·2008年Linux的25个顶级游戏
·安装Sony VAIO和HP Pavilion本本内置摄
·Linux高手过招:量身定制Linux桌面
·10套优秀的 Linux 图标 美化你的 Linux
·linux虚拟光驱介绍
·U盘Linux的制作
·引导装入工具Grub入门到精通
网摘收藏: