GLib中定义了十几种常用的数据结构类型和它们的相关操作函数,下面是关于字符串类型的简单示例:
Makefile文件如下:
#include <glib.h> int main(int argc, char *argv[]) { GString *s; s = g_string_new("Hello"); g_print("%s\n", s->str); s = g_string_append(s," World!"); g_print("%s\n",s->str); s = g_string_erase(s,0,6); g_print("%s\n",s->str); s = g_string_prepend(s,"Also a "); g_print("%s\n",s->str); s = g_string_insert(s,6," Nice"); g_print("%s\n",s->str); } |
CC = gcc all: $(CC) `pkg-config --cflags --libs glib-2.0 ` string.c -o str |
下面是输出结果:
Hello Hello World! World! Also a World! Also a Nice World! |
字符串在编程中出现频率之高,即使是初学者也很清楚,追加、删除和插入等常用操作理解后,还可以进一步了解掌握其它更复杂的操作。
GLib提供了一种内存块(GMemChunk)数据类型,它为分配等大的内存区提供了一种非常好用的操作方式,下面程序演示了内存块数据类型的简单用法:
#include <glib.h> int main(int argc, char *argv[]) { GMemChunk *chunk; //定义内存块 gchar *mem[10]; //定义指向原子的指针数组 gint i, j; //创建内存块 chunk = g_mem_chunk_new("Test MemChunk", 5, 50, G_ALLOC_AND_FREE); //名称,原子的长度, 内存块的长度,类型 for(i=0; i<10; i++) { //创建对象 //mem[i] = g_chunk_new(gchar, chunk); mem[i] = (gchar*)g_mem_chunk_alloc(chunk); for(j=0; j<5; j++) { mem[i][j] = 'A' + j;//为内存块中的指针赋值 } } g_mem_chunk_print(chunk); //显示内存块信息 for(i=0; i<10; i++) { g_print("%s\t",mem[i]);//显示内存块中的内容 } for(i=0; i<10; i++) { g_mem_chunk_free(chunk,mem[i]); //释放所有分配的内存 } g_mem_chunk_destroy(chunk); } |
Makefile文件件如下:
CC = gcc all: $(CC) `pkg-config --cflags --libs glib-2.0` data1.c -o data1 |
以下为输出结果:
GLib-INFO: Test MemChunk: 80 bytes using 2 mem areas ABCDE ABCDE ABCDE ABCDE ABCDE ABCDE ABCDE ABCDE ABCDE ABCDE |
这里说明这一数据类型的原因是通过它可以他细体会内存分配这一运行时处理环节的应用之妙。
我们在程序中分配的是50字节的空间,而实际用的是80字节,由此可以看出其在分配内存时本身用到了部分内存空间。
从上面的示例代码中可以看出,在GLib中几乎所有的对象都是C语言的结构类型,一般命名以大写字母G开头的单词,如GList表示双向链表,所有与之相关的操作函数都以小写的字母g加下划线加小写的单词加下划线开头,如以g_list_*开头的函数都是与这相关的操作函数,而且这些函数中的第一个参数多数是此对象的指针。
GLIB中的数据类型在GLIB本身,尤其是GTK+中频繁用到,了解掌握这些数据类据类型的用法是非常必要的,这对进一步灵活开发GTK+程序来说是关键一环,而且是对大学中的《数据结构》一科的很好回顾。
在下一篇GOBJECT对象系统中将详细介绍GLIB中最重要的组成部分GOBJECT系统,希望这一由C语言组建的单继承的对象系统会帮助你走进GTK+的世界。
参考链接:
http://www.ibm.com/developerworks/cn/linux/l-glib/index.html