首页 > 编程语言 >【c&c++】glib介绍

【c&c++】glib介绍

时间:2024-10-10 11:13:32浏览次数:8  
标签:glib 函数 介绍 链表 c++ 字符串 GString string

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

【参考链接】

libc
glib介绍
glibc g_strsplit 切割字符串
定义一个循环的 loop 宏方法

 

       

 

标签:glib,函数,介绍,链表,c++,字符串,GString,string
From: https://www.cnblogs.com/opensmarty/p/18455926

相关文章

  • 分布式系统1:什么是分布式系统——简要的介绍与定义
    写在前面本系列博文为博主在学习《高阶分布式系统》这门课的过程中写就。目的有二,第一是记录自己学习分布式系统的过程和心得,为后续从事分布式系统或者并行计算相关的研究打下较为夯实的基础。第二则是锻炼自己的逻辑与写作。本系列博文的写作目标不是教科书式一板一眼的教学,而......
  • 最新毕设-Python-旅游数据分析与可视化系统-48196(免费领项目)可做计算机毕业设计JAVA、
    基于python的旅游数据分析与可视化系统的设计与实现摘 要本文旨在设计和实现一个基于Python的旅游数据分析可视化系统。该系统以旅游数据为研究对象,利用Python的数据处理能力和可视化技术,对旅游数据进行深入分析,并通过直观的可视化图表展示分析结果。本文首先介绍了旅游数......
  • 使用c++ onnxruntime构建项目出现的bug
    bug1:Thegivenversion[11]isnotsupported,onlyversion1to7issupportedinthisbuild.应该是加载了C:\Windows\System32\onnxruntime.dll里的这个文件,因为我之前使用的是1.6版本,C盘下的onnxruntime.dll没有替换,导致了错误。可以把最新的onnxruntime.dll替换掉,或者直......
  • nvmecli介绍和使用
    NVMExpress® (NVMe®)technologyhasenabledarobustsetofindustry-standardsoftware,drivers,andmanagementtoolsthathavebeendevelopedforstorage.ThetooltomanageNVMeSSDsinLinuxiscalled NVMeCommandLineInterface(NVMe-CLI).Overview......
  • 稀疏促进动态模态分解(SPDMD)详细介绍以及应用
    在数据驱动分析领域,从复杂流体流动中提取有意义的模式一直是一个重大挑战。稀疏促进动态模态分解(SparsityPromotingDynamicModeDecomposition,SPDMD)提供了一种有效方法,能够揭示最主要的特征,同时去除冗余信息,从而实现更高效和更具洞察力的分解。这种方法将动态模态分解(Dynamic......
  • C++模版
    函数模版函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 函数模版的格式如下:以swap函数模版实例化为例:注意:typename 是定义函数模版的关键字,可以用 class 替代。(但是不能用 struct  替代 class)函......
  • 现代C++编程初体验
    实验任务1:task1.cpp1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78//声明9//模板函数声明10template<typenameT>11voidoutput(constT&c);1213/......
  • 异步场景: promise、async函数与await命令介绍
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。在鸿蒙的开发中,我们时常会遇到promise异步场景,有同学反馈说希望提一下。异步开发这部分的内容比较多,我不确定这位朋友具体想讨论是哪些方面,那我从......
  • 小写转换大写DEV C++
    char是计算机编程语言中可容纳单个字符的一种基本数据类型,说明数据类型是字符型,ch是变量名,变量的名字是可以随便定义的,只要符合命名规则,只不过我们经常用ch来定义一个char型的变量,以便一看就知道这是一个char型的变量%c用来输出一个字符。“%c”是格式说明符,它告诉函数按照......
  • c++单链表(带头结点)
    #include<iostream>usingnamespacestd;//定义typedefstruct_LinkNode{  intdata;//结点的数据域  struct_LinkNode*next;//结点的指针域}LinkNode,Linklist;//初始化boolInitList(Linklist*&L){  L=newLinkNode;  if(!L)returnfalse; ......