¡¡¡¡1.Àí½â Windows ´òÓ¡»ú¹ÜÀíºÍ Linux ´òÓ¡»ú¹ÜÀí
¡¡¡¡Windows ƽ̨ÌṩÁ˷dz£¼òµ¥¶øÇÒÍêÉÆµÄ´òÓ¡»ú¹ÜÀíϵͳ¡£ÔÚ 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.´òÓ¡»ú¹ÜÀíÒÆÖ²¼Ü¹¹
¡¡¡¡´òÓ¡»ú¹ÜÀíÒÆÖ²ÊÇÓ¦ÓóÌÐò¿çÆ½Ì¨ÒÆÖ²µÄÖØÒª×é³É²¿·Ö¡£²»Í¬Æ½Ì¨ËùÖ§³ÖµÄ´òÓ¡½Ó¿ÚÊDz»Í¬µÄ£¬Òò´ËÒÆÖ²µÄºËÐľÍÊÇʵÏÖÆ½Ì¨Ö®¼äµÄ´òÓ¡»ú¹ÜÀí½Ó¿ÚµÄת»»¡£ÏÂͼչʾÁË´òÓ¡»ú¹ÜÀíÒÆÖ²µÄ¼Ü¹¹¡£
[align=center]ͼ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);
ÏÄÓê ÓÚ 2006-11-18 16:47:47·¢±í:
ºÜ²»´í£¬ÓÐЩ¶«Î÷ºÜÉî°Â£¬µÃ»¹ÒªÑ§Ï°
sagacious ÓÚ 2006-11-18 12:25:00·¢±í:
²»´í,ºÜºÃµÄÌù×Ó.
veryfan ÓÚ 2006-11-18 11:01:48·¢±í:
¡¡¡¡5.5»ñÈ¡ IPP Ó¦´ð
¡¡¡¡Èç¹ûÉÏÊö²Ù×÷¶¼³É¹¦·µ»Ø£¬¾Í¿ÉÒÔ½øÒ»²½´Ó pIPPRes ½á¹¹ÖÐÌáÈ¡¸ÐÐËȤµÄÐÅÏ¢¡£ÔÚÏÂÁдúÂëÖУ¬±äÁ¿ pPrinterName£¬pPortName ºÍ pPrinterModel ·Ö±ðÓÃÀ´´æ´¢´òÓ¡»úÃû³Æ£¬´òÓ¡»ú¶Ë¿ÚºÅºÍ´òÓ¡»úµÄÀàÐÍÐÅÏ¢¡£Í¨¹ýÒÀ´Îö¾Ù IPP Ó¦´ð pIPPRes À´Ñ°ÕÒÊôÐÔ pAttr->name Ϊ "printer-name" »ò "device-uri" »ò "printer-make-and-model" µÄ·ÖÁ¿£¬¾Í¿ÉÒԵõ½ÉÏÊöÐÅÏ¢¡£
¡¡¡¡5.6ÊÍ·ÅÄÚ´æ
¡¡¡¡×îºó£¬ÐèÒªÊÍ·ÅÏà¹ØÄÚ´æÒÔÃâÄÚ´æÐ¹Â¶£º
¡¡¡¡6×Ö·û±àÂëת»»
¡¡¡¡ÔÚʵÏÖ´òÓ¡»ú¹ÜÀíµÄÒÆÖ²¹ý³ÌÖУ¬»¹ÐèÒªÌØ±ð×¢Òâ×Ö·û±àÂëת»»µÄÎÊÌâ¡£µ±È»£¬×Ö·û±àÂëÎÊÌâ²»½ö½ö¾ÖÏÞÓÚ±¾ÎÄËù̽Ìֵķ¶³ë£¬Ëüͬʱ»¹ÊÇËùÓÐÓ¦ÓóÌÐòÒÆÖ²¶¼ÐèÒªÌØ±ð¹Ø×¢µÄ¼¼Êõϸ½Ú¡£ÒÔ±¾ÎÄΪÀý£¬ÔÚ Linux ÉÏ»ñÈ¡µÄ×Ö·û´®£¬±ÈÈç´òÓ¡»úÃû³Æ£¬Í¨³£ÊÇ UTF-8(Unicode Transformation Format) ±àÂëµÄ¡£¶ø Windows Ó¦ÓóÌÐò²¢²»Ê¹Óà UTF-8 ±àÂë¡£ÓÉÓÚÀúÊ·ÔÒò£¬Windows ³ÌÐò»òʹÓà ANSI ±àÂ뷽ʽ£¬»òʹÓÃUTF-16 ±àÂ뷽ʽ¡£Òò´Ë£¬´Ó CUPS »ñÈ¡µÄ×Ö·û´®»¹ÐèÒª¸ù¾Ý³ÌÐòÔËÐл·¾³½øÐбàÂëת»»£¬Ö®ºó²ÅÄܱ» Windows Ó¦ÓóÌÐòʹÓá£×Ö·û±àÂëת»»¿ÉÒÔʹÓà IBM ICU£¨International Components for Unicode£©À´Íê³É¡£
¡¡¡¡7.½áÊøÓï
¡¡¡¡ÒÆÖ²ÊÇÒ»ÏîʵÏÖÓ¦ÓóÌÐò¿çƽ̨ÔËÐеĺËÐļ¼Êõ¡£±¾ÎÄÖØµã²ûÊöÁË Windows ´òÓ¡»ú¹ÜÀíϵͳÔÚ Linux ƽ̨ÉϵÄÒÆÖ²¼¼Êõ¡£Í¨¹ý¾ßÌå¾ÙÀý£¬±¾ÎÄÏêϸ·ÖÎöÁË´òÓ¡»ú¹ÜÀíÔÚ Linux ƽ̨ÉϵÄÒÆÖ²Ï¸½Ú¡£±¾ÕÂÉæ¼°µÄÒÆÖ²¼Ü¹¹ºÍÒÆÖ²¸ÅÄî²»½ö½ö¾ÖÏÞÓÚ´òÓ¡»ú¹ÜÀíÒÆÖ²¡£ÕâЩ¸ÅÄîºÍ˼ÏëÒ²ÊÇËùÓÐÓ¦ÓóÌÐòËùͨÓõġ£Ó¦ÓóÌÐò¿çÆ½Ì¨ÒÆÖ²ÒѾÔںܶàÈí¼þÖб»Ó¦Óá£ÊµÏÖÓ¦ÓóÌÐòÔÚ²»Í¬Æ½Ì¨ÉÏÎÞ·ì϶µÄÔËÐвÙ×÷Ò²½«ÊÇÃ¿Î»ÒÆÖ²¼¼ÊõÈËÔ±µÄ¹²Í¬Ä¿±ê¡£
veryfan ÓÚ 2006-11-18 11:00:24·¢±í:
¡¡¡¡5.3ÉèÖà IPP ÇëÇó
¡¡¡¡ÒÔÏÂÊǽøÒ»²½ÉèÖõ±Ç° IPP ÇëÇó pIPPReq µÄϸ½Ú¡£ÐèÒªÖ¸³öµÄÊÇ£¬ÔÚºÍ CUPS ·þÎñÆ÷½øÐн»»¥µÄ¹ý³ÌÖУ¬ºÜ¶àÐÅÏ¢ÊÇͨ¹ý×Ö·û´®À´´«µÝµÄ¡£Õâ¾ÍÉæ¼°µ½ÁËÎÄ×ÖÓïÑÔ±àÂë±íʾµÄÎÊÌâ¡£º¯Êý cupsLangDefault() ¾ÍÊÇÓÃÀ´»ñÈ¡ CUPS ·þÎñÆ÷µÄĬÈÏÓïÑÔÉèÖá£cupsLangDefault() µÄ·µ»ØÖµ pDefLang »¹½«×÷Ϊ²ÎÊý´«µÝ¸øÆäËüº¯ÊýÀ´Íê³É¶Ô IPP ÇëÇóµÄ½øÒ»²½ÉèÖá£
¡¡¡¡¸ù¾Ý IPP ÐÒ飬¶Ô IPP ÇëÇóµÄÉèÖÃÒª´ÓÉèÖòÎÊý "attributes-charset"£¨×Ö·û¼¯£©ºÍ"attributes-natural-language"£¨×ÔÈ»ÓïÑÔ£©¿ªÊ¼¡£ÏÂÁдúÂë·Ö±ðÓÃϵͳĬÈÏ×Ö·û¼¯ºÍCUPS ĬÈÏÓïÑÔÀ´ÉèÖÃÕâÁ½¸ö²ÎÊý¡£Íê³ÉÕâÁ½Ïî¹æ¶¨ÉèÖúó£¬Óû§¾Í¿ÉÒÔ¸ù¾ÝÐèÇó¶ÔÐèÒªµÄÐÅÏ¢Ìá³öÇëÇó¡£´Ë´¦ÐèÒª»ñµÃµÄÐÅÏ¢ÊÇ´òÓ¡»úÃû³Æ£¬¶Ë¿ÚºÅºÍ´òÓ¡»úÐͺš£ÔÚ IPP ÐÒéÖУ¬ÕâÈýÏî¶ÔÓ¦µÄIPPÇëÇ󹨼ü×Ö·Ö±ðÊÇ "printer-name", "device-uri" ºÍ "printer-make-and-model"¡£ÏÂÁдúÂ붨ÒåÁËÊý×é pReqAttrs À´´æ´¢ÉÏÊö¹Ø¼ü×Ö£¬È»ºóͨ¹ýÇëÇó²ÎÊý "requested-attributes" À´ÉèÖÃÕâЩ IPP ÇëÇó¡£
¡¡¡¡5.4·¢ËÍ IPP ÇëÇó
¡¡¡¡ÉèÖúà IPP ÇëÇóÖ®ºó£¬Í¨¹ýº¯Êý cupsDoRequest() ¾Í¿ÉÒÔ°ÑÖ¸¶¨IPPÇëÇó·¢Ë͵½·þÎñÆ÷¶Ë¡£Èç¹ûÇëÇó·¢Ëͳɹ¦£¬ÄÇôÇëÇó·¢ËÍ·½½«µÃµ½ÓÐЧµÄIPPÓ¦´ðpIPPRes¡£ÐèÒªÖ¸³öµÄÊÇ£¬¼´Ê¹ IPP Ó¦´ðÓÐЧ£¬Ò²²¢²»Òâζ×ÅËùÓÐ IPP ÇëÇóµÄÄÚÈݶ¼µÃµ½ÁËÕýÈ·µÄ»Ø¸´¡£»¹ÐèÒª½øÒ»²½¼ì²é IPP Ó¦´ðµÄ״̬´úÂë "request.status.status_code" À´ºËʵ·´À¡ÐÅÏ¢µÄÓÐЧÐÔ¡£
veryfan ÓÚ 2006-11-18 10:59:17·¢±í:
¡¡¡¡5.»ñÈ¡´òÓ¡»úÃû³Æ£¬´òÓ¡»ú¶Ë¿ÚºÍ´òÓ¡»úÐͺÅ
[/align]
¡¡¡¡WindowsʹÓÃAPI EnumPrinters() À´»ñÈ¡´òÓ¡»úÃû³Æ£¬´òÓ¡»ú¶Ë¿ÚºÍ´òÓ¡»úÐͺš£ÏêÇéÇë²Î¿¼Windows MSDN¡£ÔÚLinuxƽ̨ÉÏ£¬CUPS¿ÉʵÏÖͬÑùµÄ¹¦ÄÜ¡£¾ßÌåʵÏÖÁ÷³ÌÈçÏÂͼËùʾ£º
[align=center]ͼ2 »ñÈ¡´òÓ¡»úÐÅÏ¢£¨Ãû³Æ£¬¶Ë¿Ú£¬Ðͺţ©Á÷³Ì
¡¡¡¡5.1½¨Á¢ HTTP Á¬½Ó
¡¡¡¡Ê¹Óà CUPS »ñÈ¡´òÓ¡»úÃû³Æ£¬´òÓ¡»ú¶Ë¿ÚºÍ´òÓ¡»úÐͺÅÐÅÏ¢Ê×ÏÈÐèÒª¿ªÆô IPP ºÍHTTP ·þÎñ¡£¿ªÆô·þÎñµÄµÚÒ»²½Êǽ¨Á¢Ò»¸ö HTTP Á¬½ÓÀ´ºÍ CUPS ·þÎñÆ÷È¡µÃÁªÏµ¡£ÔÚÏÂÃæµÄ´úÂëÖУ¬cupsServer() ½«·µ»ØÖ¸ÏòĬÈÏ CUPS ·þÎñÆ÷Ãû³ÆµÄÖ¸Õ룻ippPort() ½«·µ»Ø IPP ÇëÇóµÄĬÈ϶˿ںţ»cupsEncryption() ½«·µ»Øµ±Ç° CUPS ÇëÇóµÄĬÈϼÓÃÜÉèÖ᣽«ÕâЩ·µ»ØÖµ×÷Ϊ²ÎÊý´«µÝ¸øº¯Êý httpConnectEncrypt() ¾Í¿ÉÒÔ½¨Á¢Ò»¸ö HTTP Á¬½Ó¡£Èç¹û HTTP Á¬½Ó½¨Á¢³É¹¦£¬¼´ httpConnectEncrypt() µÄ·µ»ØÖµpHTTPConnection ÓÐЧ£¬ÄÇô¾Í¿ÉÒÔ»ùÓÚÕâ¸öÁ¬½Ó½øÐÐÏÂÒ»²½ IPP ÇëÇó¡£
¡¡¡¡5.2½¨Á¢ IPP ÇëÇó
¡¡¡¡½¨Á¢Ò»¸öÐ嵀 IPP ÇëÇóÊÇͨ¹ý IPP µ÷Óà ippNew() À´ÊµÏֵġ£ÔÚ´Ë£¬operation_id ±»ÉèÖÃΪ CUPS_GET_PRINTERS£¬ÆäÓïÒåÊǵ±Ç° IPP ÇëÇóÒª»ñÈ¡ºÍ´òÓ¡»úÏà¹ØµÄÐÅÏ¢¡£Í¬Ê±£¬request_id ±»ÉèÖÃΪ 1£¬ÕâÊÇ IPP ÐÒéËù¹æ¶¨µÄ¡£