ruan-virus's Blog

Happy coding

GLIB 库简介

ruan-virus posted @ 2009年8月28日 23:23 in 未分类 with tags GLIB glib 库 , 2504 阅读

glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。
glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。glib为许多标准的、常用的C语言结构提供了相应的替代物。

如果在程序中要使用到glib库中的函数,则应该包含glib.h头文件(在gtk.h和gnome.h头文件中已经包含了glib.h了)


1 类型定义

1. 整数类型:gint8、guint8、gint16、guint16、gint31、guint32、gint64、guint64。不是所有的平台都提供64位整型
2. 整数类型gshort、glong、gint和short、long、int相同
3. 布尔类型gboolean:gboolean可以取两个值:TRUE和FALSE
4. 字符型gchar和char相同
5. 浮点型gfloat和gdouble和float、double完全等价
6. 指针gpointer对应于标准C的void*
7. gconstpointer对于于标准C的const void*

 


 

2 glib宏

2.1 常用宏

整型与指针类型间的转换

1. GINT_TO_POINTER(a):将int型转换成gpointer类型
2. GPOINTER_TO_INT(a):将gpointer类型转换成int型
3. GUINT_TO_POINTER(a):将uint类型转换成gpointer类型
4. GPOINTER_TO_UINT(a):将gpointer类型转换成整型
5. NULL宏的定义:#define NULL (void*)0(也就是说:0是一个整型数据,而NULL则是指针类型)

2.2 调试宏

前提条件检查(当定义了G_DISABLE_CHECKS时,前提条件检查宏在编译时就会消失)

断言(当定义了G_DISABLE_ASSERT后,断言宏在编译时就会消失,而不会加入生成的程序中)

所有调试宏使用g_log输出警告信息,g_log的警告信息包括发生错误的应用程序或库函数的名字。

2.3 判断构建是否是指定的构件

  1. “ GTK_IS_构件名”系列宏用来判断构件是否是相应的构件
  2. GTK_IS_BUTTON:用来判断构件是否是按钮
    GTK_IS_NOTEBOOK:用来判断构件是否是笔记本构件

3 常用函数

1. g_warning:在控制台输出一条警告信息
2. g_error:在控制台输出一条错误信息后结束程序的执行
3. g_print:在控制台输出一条信息
4. g_object_unref(gpointer object):用来对object的引用数减1。当对object的引用数降为0时,删除object
5. g_file_test:判断某个文件是否存在
6. g_spawn_sync:创建一个子进程来运行外部程序。当子进程结束后,该函数才返回(同步的执行一个子进程)
 

 


 

4 内存管理

1. g_malloc总是返回gpointer类型。如果申请失败,g_malloc将退出程序,所以不用检查返回值
2. g_free忽略任何传递给它的NULL指针
3. g_realloc函数和realloc函数功能相同
4. g_malloc0:将分配的内存的每一个单元都置0

 


 

4 字符串处理

4.1 字符串操作

  • g_snprintf:用来格式化一个字符串,比sprintf函数安全
  • g_strcasecmp:实现两个字符串大小写不敏感的比较
  • g_strncasecmp:实现两个字符串的前n个字符大小写不敏感的比较

4.2 修改字符串

1. g_strdown将字符串转换成小写字母
2. g_strup将字符串转换成大写字母
3. g_strreverse将字符串颠倒过来
4. g_strchug删除字符串前的空格
5. g_strchomp删除字符串尾的空格

4.3 字符串转换

1. g_strtod:把字符串转换成gdouble类型
2. g_strerror:将出错代码转换成描述出错代码的字符串
3. g_strsignal:将信号值转换成描述信号的字符串

4.4 其他字符串转换函数

1. g_strdup和g_strndup返回一个已分配内存的字符串或字符串前n个字符的拷贝
2. g_strconcat用来连接两个字符串
3. g_strsplit在每个分隔符处分隔分割字符串,并返回一个新分配的字符串

 


 

5 数据结构

5.1 链表

    glib提供了普通的单向链表和双向链表,分别是GSList和GList。链表中的数据域是一个gpointer类型(通过GINT_TO_POINTER转换也可以使得链表中可以保存整型)。

  • g_list_pervious用在双向链表中来查找指定元素的前一个元素,该函数为双向链表中独有的函数。
  • 注:这里只讲单向链表函数,其它双向链表函数只需要将单向链表函数名改为“g_list_名称”即可,也适用。
  • g_slist_append用来在单向链表中添加一个元素
  • g_slist_remove用来在单向链表中删除一个元素
  • g_slist_next用来获取指定元素的下一个元素
  • g_slist_prepend用来在链表表头插入数据
  • g_slist_reverse用来将链表中的元素反置
  • g_slist_insert用来在指定位置插入一个元素
  • g_slist_remove用来在删除指定的元素
  • g_slist_foreach对链表的每一项调用GFunc函数。GFunc函数的定义如下:void* GFunc(gpointer data,gpointer user_data)

5.2 树

    在glib中有两种不同的树:GTree是基本的平衡二叉树,它将存储的数据按其值排序成二叉排序树

5.3 哈希表


6 GString

    GString类似于标准C的字符串类型,但是GString能够自动增长,这些特性可以防止程序中的缓冲区溢出。下面是GString的定义:

struct GString{
    gchar* str;   指向字符串数据的存储空间
    gint len;     字符串的长度
}

 

1. g_string_new(gchar* init):使用一个字符串来创建一个GString结构
2. g_string_free(GString* string,gint free_segment):释放GString所占的内存
3. g_string_assign(GString* lval,const gchar* rval):将字符串rval复制到lval,销毁lval原有的内容
4. g_string_truncate:截取字符串来生成指定长度的字符串
5. g_string_append:将字符串追加到指定字符串后面
6. g_string_append_c:将字符追加到指定的字符串后面
7. g_string_prepend:将字符串追加到指定的字符串前面
8. g_string_prepend_c:将字符追加到指定的字符串前面
9. g_string_sprintf:将一个格式化字符串写入到GString中

 


 

7.计时器函数

    计数器函数可以用于为操作计时。使用过程如下:

1. 使用g_timer_new创建一个计时器
2. 使用g_timer_start来开始对操作计时
3. 使用g_timer_stop来停止计时
4. 使用g_timer_elapsed来判断计时器运行的时间
5. 不用时,使用g_timer_destroy来销毁一个计时器
6. 在使用过程中,还可以使用g_timer_reset来将计时器重新置零

 


 

8 错误处理函数

1. g_strerror使用错误代码来获取一个描述错误的字符串。输出结果一般采用:“程序名:发生错误的函数名:文件或者描述”
2. g_error打印一条出错信息,然后退出程序。其格式与printf相似,但在它的信息前面加上了“**ERROR**”
3. g_warning打印一条警告信息,与printf相似,但在它的信息前面加上“**WARNING**”,而且它不退出程序。通常用于不是太严重的错误
4. g_message在输出的字符串前面加上了“**message**”,用来输出一条信息
5. g_strsignal通过信号值获取描述该信号的字符串

 


9 其它实用函数

  1. g_get_prgname:获取程序的名字
  2. g_set_prgname:设置程序的名字
  3. g_get_user_name:返回当前用户的名字
  4. g_get_real_name:获取用户的真实名称
  5. g_get_home_dir:获取用户的根目录
  6. g_get_current_dir:获取当前工作目录
  7. g_basename:获得文件名(不带前导目录部分)
  8. g_dirname:返回文件名的前导目录部分
  9. g_atexit:指定一个在正常程序中止时要执行的函数

g_assert(condition):判断条件是否满足,不满足则输出一条警告信息后退出程序的执行
1.g_return_if_fail(condition):如果条件为假,则输出一条警告信息后从当前函数立刻返回
2.g_return_val_if_fail(condition,retval):如果条件为假,则输出一条警告信息后,从当前函数返回,返回值为retval

 

 

Avatar_small
celeb networth 说:
2022年11月18日 20:54

Billie Eilish - the youngest person and second person ever to win the four main Grammy categories, was born in December 18, 2001, find out more about her net worth on celebrity networth


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter