做爰免费网站,机关单位不得建设网站,做网站资源存储,网站关键字语法本文来自百度#xff0c;做一个总结笔记录#xff1a;
一、glibc简介
glibc是GNU发布的libc库#xff0c;即c运行库。glibc是linux系统中最底层的api#xff0c;几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外#xff0c;它本身也提…本文来自百度做一个总结笔记录
一、glibc简介
glibc是GNU发布的libc库即c运行库。glibc是linux系统中最底层的api几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外它本身也提供了许多其它一些必要功能服务的实现
主要的如下
1string字符串处理
2signal信号处理
3dlfcn管理共享库的动态加载
4direct文件目录操作
5elf共享库的动态加载器也即interpreter
6iconv不同字符集的编码转换
7inetsocket接口的实现
8intl国际化也即gettext的实现
9io
10linuxthreads
11locale本地化
12login虚拟终端设备的管理及系统的安全访问
13malloc动态内存的分配与管理
14nis
15stdlib其它基本功能
二、libc、glibc和glib的关系
libc 是 Linux 下的 ANSI C 函数库glibc 是 Linux 下的 GUN C 函数库
libc主要包括 ctype.h包含用来测试某个特征字符的函数的函数原型以及用来转换大小写字母的函数原型 errno.h定义用来报告错误条件的宏 float.h包含系统的浮点数大小限制 math.h包含数学库函数的函数原型 stddef.h包含执行某些计算 C 所用的常见的函数定义 stdio.h包含标准输入输出库函数的函数原型以及他们所用的信息 stdlib.h包含数字转换到文本以及文本转换到数字的函数原型还有内存分配、随机数字以及其他实用函数的函数原型 string.h包含字符串处理函数的函数原型 time.h包含时间和日期操作的函数原型和类型 stdarg.h包含函数原型和宏用于处理未知数值和类型的函数的参数列表 signal.h包含函数原型和宏用于处理程序执行期间可能出现的各种条件 setjmp.h包含可以绕过一般函数调用并返回序列的函数的原型即非局部跳转 locale.h包含函数原型和其他信息使程序可以针对所运行的地区进行修改。 地区的表示方法可以使计算机系统处理不同的数据表达约定如全世界的日期、时间、美元数和大数字 assert.h包含宏和信息用于进行诊断帮助程序调试。
Linux下面的标准c库不仅有这一个如uclibc、klibc以及上面被提到的Linux libc但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6
glib库是Linux平台下最常用的C语言函数库它具有很好的可移植性和实用性
三、glib简介
glib是Gtk 库和Gnome的基础。glib可以在多个平台下使用比如Linux、Unix、Windows等。glib为许多标准的、常用的C语言结构提供了相应的替代物。
如果在程序中要使用到glib库中的函数则应该包含glib.h头文件在gtk.h和gnome.h头文件中已经包含了glib.h了
从下面的代码部分可以看到都以g打头或者g_打头的都是glib的东西
3.1类型定义
1. 整数类型gint8、guint8、gint16、guint16、gint32、guint32、gint64、guint64。不是所有的平台都提供64位整型
2. 整数类型gshort、glong、gint和short、long、int相同
3. 布尔类型gbooleangboolean可以取两个值TRUE和FALSE
4. 字符型gchar和char相同
5. 浮点型gfloat和gdouble和float、double完全等价
6. 指针gpointer对应于标准C的void*
7. gconstpointer对于于标准C的const void*
3.2内存管理
1. g_malloc总是返回gpointer类型。如果申请失败g_malloc将退出程序所以不用检查返回值
2. g_free忽略任何传递给它的NULL指针
3. g_realloc函数和realloc函数功能相同
4. g_malloc0将分配的内存的每一个单元都置0
5.字符串处理
3.3数据结构 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) 2 树
在glib中有两种不同的树GTree是基本的平衡二叉树它将存储的数据按其值排序成二叉排序树 3 哈希表 3.4 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中
3.5 glib使用
gcc pkg-config --cflags --libs glib-2.0 hello.c -o hello