GLib学习笔记

一 Glib笔记1

以前主要是做C++,最近有个机会转到嵌入式的C,大部分用的是Glib/Gobject系统,前一周的样子把相关内容大致浏览了一遍,主要以reference Menu为主。我看英文书的一个习惯是看一章,总结一章,这样学得快,记得牢。以前整理过很多书籍,不过都是本地的doc文档。在学Glib过程中,从网上学到很多知识,所以我也放到博客上吧。仅供自己总结,风格比较随意。

这一部分主要是Glib的基础

1.1 版本信息

注意,自己的程序里边都要包含<glib.h>

下面这些宏:用于版本信息,主要用于configure时候的版本检测,一般应用程序不太用这个

#define             GLIB_MAJOR_VERSION

#define             GLIB_MINOR_VERSION
#define             GLIB_MICRO_VERSION
#define             GLIB_CHECK_VERSION             (major,minor,micro)
最后一个宏,返回布尔值,应用程序可用他判断是否为正确的版本。

[这一小节没什么东西]

1.2 基本数据类型

Glib提供了一套可移植的原始数据类型,例如gint等,知道这个就行了,以后写Glib的程序,尽量用它定义的数据类型

有几个值得注意:

l         gboolean:返回TRUE或FALSE

l         代表返回void*指针的--gpointer,以及一个const void*  gconstpointer

l         返回可表示范围的,例如G_MINSHORT,G_MAXSHORT等

l         提供给print和scan函数的宏,如G_GINT16_MODIFIER/G_GINT16_FORMAT等

l         64位整数,有两个红,G_GINT64_CONSTANT,G_GUINT64_CONSTANT。

l         sizeof(struct)返回gsize类型,goffsset=gint64

[没什么难度这一节]

1.3 基本数据类型的表示范围

上一节也提到过,例如G_MAXINT,G_MININT等

1.4 标准宏

#define             G_STRUCT_MEMBER(member_type, struct_p, struct_offset)

member_type:成员类型

strutc_p:指向该结构的指针

struct_offset:偏移

估计里边的实现是 (member_type*)((gchar*)struct_p + struct_offset)

类似的还有:

#define             G_STRUCT_MEMBER_P(struct_p, struct_offset)

没有前面的强制类型转换了

#define             G_STRUCT_OFFSET(struct_type, member)

返回member在结构中的偏移字节。具体怎么实现有点忘记了,但是内核代码中常见这样的内容。

1.5 类型转换宏

#define             GINT_TO_POINTER                     (i)

#define             GPOINTER_TO_INT                     (p)

#define             GUINT_TO_POINTER                    (u)

#define             GPOINTER_TO_UINT                    (p)

#define             GSIZE_TO_POINTER                    (s)

#define             GPOINTER_TO_SIZE                    (p)

目的其实很简单,就是在指针类型中存储整数类型。我们倒是经常在Windows下用DWORD存储指针类型的数据。

1.6 字节序宏

转换字节序的一些辅助宏和函数,例如g_htons,g_ntohs等。

l         本机是怎样的字节序?查看宏定义G_BYTE_ORDER

没什么意思

1.7 数值定义

定义一些数值常量。

G_PI,定义Pi常量。

没什么意思

1.8 其他杂项

l         定义一个多行的宏,G_STMT_START和G_STMT_END,其实就是do/while{0}的组合

l         G_BEGIN_DECLS,G_END_DECLS,头文件中用的开头和结尾

有些有用,到时候再查就知道了。

1.9 原子操作函数

很多啊

gint                g_atomic_int_get                    ();

void                g_atomic_int_set                    ();

void                g_atomic_int_add                    ();

gint                g_atomic_int_exchange_and_add       ();

gboolean            g_atomic_int_compare_and_exchange   ();

gpointer            g_atomic_pointer_get                ();

void                g_atomic_pointer_set                ();

gboolean            g_atomic_pointer_compare_and_exchange

();

void                g_atomic_int_inc                    (gint *atomic);

gboolean            g_atomic_int_dec_and_test           (gint *atomic);

manual做的也真是不到位,竟然连参数都没有写进来。

看这些东西,最好装一个source insight。直接看源码。

Glib学习笔记(1)相关推荐

  1. 【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption

    1.类型:glib/gtypes.h 1.1 基本类型: typedef char gchar; typedef short gshort; typedef long glong; typedef i ...

  2. 【GLib】GLib学习笔记(二):源码编译

    一.源码下载 http://ftp.acc.umu.se/pub/GNOME/sources/glib/ 本人下载是最新版本(截至2020-08-26):glib-2.65.2.tar.xz 二.安装 ...

  3. 【GLib】GLib学习笔记(一):GLib、GObject、GType

    1.GLib GLib是 Gtk+ 库和 Gnome 的基础.glib 可以在多个平台下使用,比如 Linux.Unix.Windows 等.GLib为许多标准的.常用的 C 语言结构提供了相应的替代 ...

  4. GTK+图形化应用程序开发学习笔记(一)—概述

    GTK+图形化应用程序开发学习笔记(一)-概述 一.什么是GNOME. GNOME的意思是"GNU Network Object Model Environment"(GNU网络对 ...

  5. deepstream学习笔记(三):deepstream-imagedata-multistream解析与接入适配yolov5模型测试

    引言 上一节重点介绍了gstreamer架构图与各部分组成原理说明,并且针对deepstream-test1介绍了它的整体功能和画出了管道图,本篇博文将详细介绍deepstream-imagedata ...

  6. Chrome学习笔记(二):UI组件,皮肤引擎

    原创文章,转载请注明:转载自Soul Apogee 本文链接地址:Chrome学习笔记(二):UI组件,皮肤引擎 -- 基础设施篇 Chrome的UI是很奇妙的,因为看起来能很好的跨平台,而且可以很好 ...

  7. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  8. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. Asp.Net_Mvc_IgnoreRoute
  2. 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点
  3. Object之defineProperty
  4. 如何有效的在 LINQ 查询中处理异常?
  5. python c4.5完整代码_python实现c4.5/Id3自我练习
  6. python进阶与数据操控_零基础机器学习Python进阶:Python操作MySql
  7. 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
  8. 【面向对象】面向对象程序设计测试题5-Java中的对象交互测试题
  9. java sql update用法_使用if else条件将SQL UPDATE语句转换为php(codeigniter)
  10. 在Linux上安装Chef工作站
  11. 一款网盘软件应该具备哪些功能?
  12. php sub pos,PHP pos()用法及代码示例
  13. 灵格斯Lingoes词典及浏览器插件实现屏幕取词等功能的配置使用方法
  14. Flex Builder教程
  15. hmm 隐马尔可夫模型讲解
  16. 全国计算机大赛游戏作品,计算机作品大赛优秀作品展示---数字动漫游戏栏目
  17. switch case的天坑
  18. mysql错误1548 Cannot load from mysql.proc的最终解决方法
  19. python搜狗微信搜索wechatsogou 用法
  20. Arduino制作俄罗斯方块小游戏(一)整体设计思路

热门文章

  1. 狗是人类最忠诚的伙伴,当狗遇到不同的人会有不同的反应,下面要求编写一个案例模拟狗遇到不同的人时的反应。
  2. 计算机毕业设计之android的二手车交易系统app(源码+系统+mysql数据库+Lw文档)
  3. 二手书店APP软件开发定制
  4. Windows 8 平板(推荐)
  5. 兰博基尼lp650-4跑车介绍
  6. beego之bee 工具简介
  7. 【Linux】一张图让你读懂Linux内核运行原理
  8. IBM微码刷新(二)在服务器上使用BoMC介质刷新微码-cuixf@DC
  9. addon@Node.js之新手上路
  10. flowable 排他网关