免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1102 | 回复: 0

glib介绍 [复制链接]

论坛徽章:
0
发表于 2009-01-04 02:50 |显示全部楼层
  首先,glib和glibc是两个不同的东东,glibc是GNU实现的实现的一套标准C的库函数,而glib来自于gtk+中与图形无关的部分,那么gtk+又是什么东东?没错,gtk+也是一套库,本来它是专门为GIMP专门开发的一套函数库,那么GIMP又是什么东东...总之,glib就是在开发一套图形软件中形成的一套库,大家都觉得挺好用就到别的软件的开发中也用glib,慢慢的就形成了气候,glib就成了现在这个样子。以下开始抄袭:


  gobject是glib的精粹,glib是用C实现的,但在很大程序是基于面向对象思想设计的,gobject是所有类的基类。signal在其中也是一大特色,signal与操作系统中的signal并不一样,它是类似消息一样的东西,让消息在各个对象间传递,但尽量降低对象间的耦合。仔细读一下它的代码,唯一想说的话就是“绝!”。

动态数组、链表、哈希表等通用容器,在不同的公司,在不同的时期,在不同的情况下,我们每个人对每一种容器,可能都实现过N次以上。甚至在同一个项目里,出现几份链表的实现,也并非罕见。一直在抱怨,标准C中为什么没有类似于STL的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运,有了glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器,完全是面向对象设计的,实现得非常精致。不用白不用,别客气了。

你开发过跨硬件平台的软件吗?是不是常常为硬件平台的差异而苦恼呢?字节顺序是常见的问题之一,大端格式,小端格式,还是PDP格式的?这样差异造成的BUG会浪费不少时间,同时让代码晦涩难读。glib提供了一套完整的宏,利用这些宏编写程序,问题大大简化了。

你开发过跨操作系统的软件吗?在不同的平台下,很多函数有相同的功能,但函数原型,返回值差异巨大,也有的貌合神离,相同的名称有着不同的意义,请看下面这张清单:
       动态库加载函数
       线程函数
       信号量函数
       互斥锁函数
       事件函数
       字符集转换函数
       原子操作函数
       创建进程函数
       时间格式
       IO函数
为完成相同的功能,你却要为此写出不同的代码。那怕只是一个简单的封装,这么多,你烦不烦?用glib吧,它的作者们都是高手中的高手,对不同的平台的理解程度,远远超出你和我,而且这些程序经过大量的应用程序测试,已经非常的稳定了,放心的用吧。

你写过读取配置文件的模块吧,像读取ini这样简单格式的文件,当然不在话下,要读markup语言格式的配置文件,难度可能大了点,虽然不是不可能,但除非是为了学习,何必自己找麻烦呢。glib里提供了词法分析、markup语言解析、ini文件存取等功能,你完全不用为此担忧。

不管是命令行程序,还是GUI程序,或者后台服务进程,通过命令参数来控制程序的行为,都是开发人员惯用的手法。从命令行参数取到有用的信息,不难,遍历一遍不就行了吗?但在每个程序中都来遍一次,你不觉得很单调吗?我们的时间很宝贵,浪费时间做这种事情,不值得吧。glib的作者们早考虑到了,它提供了这样的功能,你调用的它的函数,可能轻松的取得所要的命令行参数。

对于正则表达式,Win32下的开发人员可能用得少一点,而在Linux下的Shell里,它却是不可或缺之物。有没有想到在自己的程序中使用的它呢,在有的情况下,使用正则表达式,可能会大大降低开发的难度,提高易用性。glib也想到了这一点,它提供了简单的正则表达式功能,当然,用与不用完全取决于你自己。

在程序里,如果程序出错了,特别是调了不该调用的函数,你是不是很想知道是谁调了它?大多数时候用debuger是最好的选择,在某些情况下,没有debuger可用,或者在debuger里重现不了这个问题,你会不会觉得很无助?别怕,glib提供了一套跨平台的backtrace函数,有了它,你可以很容易找到元凶了。

如果读过一些大型的开源项目,你会发现,差不多每个项目都有一套自己的log函数,用于记录程序运行的调试或者审计信息。也有可能,你自己都曾在不同的项目里实现过好几次这个功能,第一次实现会觉得很好玩,会学到了一些东西,后来就会发现自己在做无用功。重复就是浪费,重复就是犯罪,glib想到了这一点,它实现了一套完整的log机制,供大家在不同的项目中使用。

产生质数的算法不难,在我们的程序里也像是星外来客,很少使用,常常忽略了它。所谓书到用时方恨少,有这样的东东,说不定就有用得到它的时候。glib提供了这样的功能,同时还提供了一个较好的随机数算法。

Linux Shell里的自动补完功能很好用吧,从Linux转移到Win32下工作的开发人员,常常抱怨Win32的Shell里没有这个功能,其实Win32下也是有的,把注册表里的一个选项打开就行了。不管怎么样,总之这个功能太有用了,没有它,你都会觉得少了点什么,全身不自在,glib里连这个功能都提供了,是不是很人性化呢?

内存问题!还是内存问题!如果你没有为内存问题而苦恼过,我都怀疑你是不是一个真正的C语言程序员。内存泄露、访问越界、空指针、野指针和内存优化等问题,是不是都曾让你夜不能昧?有些工具可以帮助你,但这不是万能的良药,好好写你的程序才是第一要义。glib提供了一些的手段,也可以在一定程度上减轻你的痛苦。文章出处:
http://www.diybl.com/course/6_system/linux/Linuxjs/20081012/150268.html


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90383/showart_1771696.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP