如何使用 GLib 工具集管理 C 数据 glib不是一个学院派的东西,也不是凭空想出来的,完全是在开发 gtk+的过程中,慢慢总结和完善的结果。如果你是一个工作 3 年以上的 C 语言程序员,现在让你讲讲写程序的苦恼,你可能有很多话要说,但如果你有时间研究一下 glib,你会发现,很多苦恼已不再成其为苦恼,glib里很多东西正是你期望已经 久的。 gobject是 glib的精粹,glib是用 C 实现的,但在很大程序是基于面向对象思想设计的,gobject是所有类的基类。signal在其中也是 一大特色,signal与操作系统中的 signal并不一样,它是类似消息一样的东西,让消息在各个对象间传递,但尽量降低对象间的耦合。仔细读一下它的 代码,唯一想说的话就是“绝!”。 动态数组、链表、哈希表等通用容器,在不同的公司,在不同的时期,在不同的情况下,我们每个人对每一种容器,可能都实现过 N 次以上。甚至在同一个项目里, 出现几份链表的实现,也并非罕见。一直在抱怨,标准 C 中为什么没有类似于 STL 的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运, 有了 glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器,完全是面向对象设计的,实现得非 常精致。不用白不用,别客气了。 组织数据 GLib 的范畴 首先研究 GLib 的范畴。 GLib 是一个提供了很多实用定义和函数的底层程序库,包括基本类型及其限定的定义、标准宏、类型转化、字节次序、内存分配、警告与断言、 消息日志、计时器、字符工具、钩子函数、词法扫描器、模块的动态加载,以及自动的字符串补齐。 GLib 还定义了很多数据结构(以及它们相关的操作),包括: 内存块(Memory chu nks) 双向链表(Doubly-linked lists) 单向链表(Singly-linked lists) 散列表(Hash tables) 字符串(Strings,可以动态增长) 字符块(String chunks,成组的字符串) 数组(Arrays,当增加元素时其大小能够增长) 平衡二叉树(Balanced binary trees) N-叉树(N-ary trees) Quarks(字符串和唯一整型标识符的双向关联) 有关键字的数据列表(Keyed data lists,通过字符串或者整型 id 访问其数据元素的列表) 关系(Relations)和元组(tuples)(可以由任意数目的域进行索引的数据表) 缓存 组织数据 GLib 的范畴 首先研究 GLib 的范畴。 GLib 是一个提供...