Linux下解析配置文件和GKeyFile读取配置文件

【BlueZ 】config 模块:配置文件的解析与参数加载流程 本文深度剖析BlueZ5.x中config模块的配置管理机制,涵盖多级配置源(代码默认值、全局/适配器/设备配置文件、运行时修改)、INI格式解析、合法性校验、表驱动参数解析、默认值兜底及运行时生效流程。核心实现包括btd_opts结构体、parse_config与load_defaults函数、GKeyFile配置读写、内核参数下发(MGMT接口)及DBus同步机制。通过严谨的错误处理与分层覆盖策略,确保配置安全可靠,为蓝牙定制开发与问题排查提供关键参考。 阅读详情

本文主要转载两篇文章:来对GKeyFile的讲解
一.http://blog.youkuaiyun.com/newtonnl/article/details/8085795
二.http://blog.chinaunix.net/uid-199788-id-2420084.html
一.Linux下解析配置文件
配置文件在Linux下使用得非常普遍。形如下面的这个文件就是一个典型的配置文件:

# this is just an example
# there can be comments before the first group
[First Group]
Name=Key File Exampletthis value showsnescaping
# localized strings are stored in multiple key-value pairs
Welcome=Hello
Welcome[de]=Hallo
Welcome[fr_FR]=Bonjour
Welcome[it]=Ciao
Welcome[be@latin]=Hello
[Another Group]
Numbers=2;20;-200;0
Booleans=true;false;true;true

在Windows系统中,也存在这类文件,通常后缀名是ini。在GTK的世界中,称这类文件为Key File(因为这个文件包含很多的字段(key)?)。这两类文件看上去差不多,但是还是有一些区别的:

首先就是注释,init文件把“;”视作注释开始,而Key File,显然是用“#”
Key File所有的配置项都在配置段中,即任何配置项之前肯定有类似”[配置段]“的东西。
还有就是众所周知的,Windows下的ini文件通常不是UTF8编码,而Linux下,显然推荐这么干
另外就是配置项和配置段大小写,Linux下的key file是区分的
在Keyfile中允许数据类型为逻辑型的配置项,取值为true或者false。而ini文件里大概只有用整形的配置项目与之对应了

//简单介绍完了,我们在用一个简单的例子:
#include
#include
int main(int argc, char **argv)
{
GKeyFile * config;
gchar *str;
config = g_key_file_new();
g_key_file_load_from_file(config, argv[1], 0, NULL);
str=g_key_file_get_string(config,"options","HoldPkg",NULL);
printf("HoldPkg of options section is "%s"n", str);
g_key_file_free(config);
return 0;
}

使用下面的命令编译:

gcc `pkg-config --cflags --libs glib-2.0` dummy.c

这里的pkg-config –cflags –libs glib-2.0用于自动查找调用glib所需的头文件和库文件路径,并且按照CFLAGS所需的格式输出。
我们用的范例配置文件(援引自pacman的配置文件)如下:

[options]
HoldPkg = pacman glibc

运行效果怎么样呢?

athurg@AT.nts-intl.com tmp]$./a.out /etc/pacman.conf
HoldPkg of options section is "pacman glibc"

范例程序很简单,但是五脏俱全,要使用glib来解析配置文件,大概有下面的几个流程:

首先用g_key_file_new()建立一个GKeyFile缓冲区
然后用g_key_file_load_from_file()来初始化填充这个缓冲区
接着,你就可以用g_key_file_get_数据类型()来获取数据了
或者,使用g_key_file_set_数据类型()来更新设置数据
而且,使用g_key_file_remove_key()来删除设置项
那么增加设置项呢?当设置数据时,如果没有该数据项,默认就会增加
当然,在此之前,如果不放心的话,还可以通过g_key_file_has_group()、g_key_file_has_key()来判断数据段、数据项是否存在
末了,你可能想把更新后的配置写回去,这个有点怪,需要用g_key_file_to_data()将缓冲区里的配置数据转成字符串,然后将这个字符串写入到配置文件即可。这个函数同时也会返回字符串的长度,供写入时使用
最后,一个良好的习惯——调用g_key_file_free()来释放缓冲区

数据类型包括字符串、整形、长整型、浮点……,以及这类数据组成的数组。
另外glib甚至还可以读写各个配置项上的注释,神奇吧?
更多的神奇,还是参考glib的官方文档去吧。
另外,听说还有个叫做iniparser的小玩意,也是干这事儿的,大家有空没空可以去围观一下。
http://tiaozhanshu.com/node/313

二.GKeyFile读取配置文件
对于GKeyFile生成的格式文件,同样可以通过此数据结构进行读取文件中的配置信息,生成的配置文件内容为:

[STARTUP]
x=300
y=600
center=true
timestamp=1314432584
random=0.78204092288815774

[PATH]
bin_path=/bin;/sbin;/usr/bin;/usr/local/bin;/home/jcodeer/bin;

这次使用GKeyFile将其中的每一键项读取出来,进行输出。程序代码:

#include

int main(int argc,char** argv){
    GKeyFile* config = g_key_file_new();
    g_key_file_load_from_file(config,"./019.ini",G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,NULL);

#define STARTUP "STARTUP"
#define PATH    "PATH"

    gchar* x = g_key_file_get_value(config,STARTUP,"x",NULL);
    g_print("x = %s\n",x);

    gchar* y = g_key_file_get_string(config,STARTUP,"y",NULL);
    g_print("y = %s\n",y);

    gboolean center = g_key_file_get_boolean(config,STARTUP,"center",NULL);
    g_print("center = %d\n",center);

    gint timestamp = g_key_file_get_integer(config,STARTUP,"timestamp",NULL);
    g_print("timestamp = %u\n",timestamp);

    gdouble random = g_key_file_get_double(config,STARTUP,"random",NULL);
    g_print("random = %0.10f\n",random);

    gsize length,i;
    gchar** bin_path = g_key_file_get_string_list(config,PATH,"bin_path",&length,NULL);

    g_print("bin_path=");
    for(i = 0; i < length;i++){
        g_print("%s;",bin_path[i]);
    }
    g_print("\n");

#undef STARTUP
#undef PATH

    g_key_file_free(config);
    return 0;
}
【BlueZ 】用户态入口:main.c 核心函数与程序启动流程 BlueZ 的用户态守护进程 bluetoothd 是整个蓝牙协议栈的核心控制中心,负责: 管理蓝牙适配器 处理设备连接与断开 实现蓝牙 Profile(A2DP、HFP、GATT 等) 提供 DBus 接口供上层应用调用 所有这些复杂功能的起点,就是 src/main.c 中的 main() 函数。 阅读详情

相关推荐

从ESP/ABS选型看轮速传感器:为什么你的车用了AK+PWM+7/14mA三种协议?

本文深入解析了汽车轮速传感器的三种主流协议(7/14mA电流型、PWM型和AK协议型)及其混合应用场景。通过对比不同协议的技术特点、成本效益和工程挑战,揭示了现代车辆采用多种传感器协议背后的设计逻辑,包括成本控制、性能平衡和冗余设计等关键因素。

weixin_29266679的博客 534

GKeyFile读取配置文件

对于GKeyFile生成的格式文件,同样可以通过此数据结构进行读取文件中的配置信息,生成的配置文件内容为: [STARTUP] x=300 y=600 center=true timestamp=1314432584 random=0.78204092288815774 [PATH] bin_path=/bin;/sbin;/usr/bin;/usr/local

#维多利亚的秘密# 1456

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 460

通过Glib库中的GKeyFile来读取配置文件

系统中的好多配置文件的读取方式都是通过GkeyFile读取的。 常用函数如下: g_key_file_new() g_key_file_load_from_file() g_key_file_get_groups() 实例代码如下,但是我没有编译通过,不知道缺少了什么参数。 我的编译参数是 gcc `pkg-config glib-2.0 --cflags --libs` ma

为了孩子他娘 4390

快速傅里叶变换(FFT)原理详解:从理论到实践

本文系统介绍了快速傅里叶变换(FFT)的理论与实践。首先阐述了傅里叶变换的数学定义和离散傅里叶变换(DFT)的矩阵表示,指出其O(N²)计算复杂度限制了实际应用。然后详细解析了Cooley-Tukey算法的核心思想,包括分治策略、蝶形运算原理和旋转因子的周期性特性,将复杂度降至O(Nlog₂N)。文章比较了按时间抽取(DIT)和按频率抽取(DIF)两种FFT算法实现,并讨论了FFT在信号处理等领域的应用及其局限性。通过理论分析和实例说明,展现了FFT如何成为现代数字信号处理的基石算法。

qq_42212808的博客 2939

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100% (1)

公众号推出《QMT量化实战》系列,通过多维度、多策略、多场景讲解QMT量化平台应用,每期附代码解读。本期复现《支持自定义筛选与排序的多因子策略》,策略包含三大核心模块:1. 通过Tushare获取30+财务因子数据;2. 提供灵活筛选机制(支持排除ST股、次新股及特定板块);3. 创新性多因子加权排序系统(支持自定义因子权重组合)。交易逻辑包含动态调仓机制,当持仓标的排名低于阈值时触发卖出。该策略具有高度可配置性,适合不同风险偏好的投资者。(149字)

qq_46262068的博客 1733

3_15_GLib库入门与实践_Key-Value风格文件解析

简介 GKeyFile是一个key-value文件解析器,可以解析key-value文件,也可以对文件进行修改。key-value文件和ini文件非常相似,但又有不同(不同点见本章专题),freedesktop.org的很多标准都采用了key-value文件,如Desktop Entry Specification 标准及Icon Theme Specification。 数据结构 GKeyFile是一个不透明的结构体。 typedef struct _GKeyFile GKeyFile; 函数列表 GK

field1003的博客 852

YOLOv10改进 | 代码逐行解析(三) | YOLO中的Mosaic增强详解(新手入门必读系列)

本文给大家带来的是YOLOv10中的Mosaic增强代码的详解,可能有部分人对于这一部分比较陌生,有的读者可能知道Mosaic增强但是不知道其工作原理,具体来说Mosaic增强就是指我们的数据集中的图片在输入给模型之前的一个处理过程(我们的图片并不是直接就输入给模型了,大家的训练结果中的结果检测图片大家可以看到数据集中多个图片会组合在一起这就是简单的Mosaic增强),下面我就来讲解一下其在YOLOv10中工作原理和代码定义,下面图片为一个Mosaic增强后的图片。​。

Snu77的博客 2077

GKeyFile生成配置文件

Linux中提供了功能强大的KeyValue数据格式,可用于生成更为灵活的配置文件,下面的代码实例演示了使用GKeyFile生成配置文件,本例代码使用了字符串,布尔值,整型值,双精度值和字符串列表等数据类型,将其写入配置文件中。

好书推荐 2473

深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?

首先介绍 AI 时代 Java 开发框架选择背景,接着对比两者功能特性(Spring AI 的生态集成与标准化设计、LangChain4j 的多模型适配与提示工程)、应用场景(企业级系统改造与创新产品开发)、开发体验(学习成本与调试工具)、生态扩展(Spring 商业支持与 LangChain4j 开源社区)、性能安全(企业级优化与自主安全实现)及成本趋势(短期投入、长期回报与技术演进),最后给出选型建议与混合架构方案。

博客 5446

PCL 直通滤波器【2026最新版】

PCL直通滤波器函数详解以及用于多字段滤波、强度滤波、获取某一时间范围内的点等高阶用法案例分享。博客长期更新,本文最近一次更新时间为:2026年3月11日。

点云侠的博客 40万+

glib读写ini文件测试

glib读写ini文件测试

627

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

.key文件Linux如何运行,Linux下解析配置文件和GKeyFile读取配置文件

# this is just an example# there can be comments before the first group[First Group]Name=Key File Exampletthis value showsnescaping# localized strings are stored in multiple key-value pairsWelcome=Hel...

weixin_31864641的博客 1129

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LINUX下解析配置文件(配合上篇使用)

<br />LINUX下解析配置文件<br />配置文件在Linux下使用得非常普遍。形如下面的这个文件就是一个典型的配置文件:# this is just an example # there can be comments before the first group [First Group] Name=Key File Exampletthis value showsnescaping # localized strings are stored in multiple key-value

keyoflov的专栏 1723

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

glib读写配置文件接口

源代码: #include &lt;stdio.h&gt; #include &lt;glib.h&gt; int main() { gchar *conf_file, *conf; GKeyFile *keyfile = NULL; GError *error = NULL; gchar **keys = NULL; gsize nkeys, i; ...

FlayHigherGT的博客 2743

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GKeyFile 是一个用于存储和检索按键值对

存储和检索按键值对的文件

文石_2009的博客 317

Glib学习(17) Key-value文件解析器 Key-value file parser

glib源码下载:http://ftp.gnome.org/pub/gnome/sources/glib/glib帮助文档:https://developer.gnome.org/glib/本节主要讲解Key-value文件解析器,可以轻松的帮我们实现配置文件的解析,类似于.ini文件的解析。Includes#include &lt;glib.h&gt;#include &lt;glib/gpri...

andylauren的专栏 5525

GLIB系列文章目录 - GFile, GKeyFile, GMappedFile 文件类型

GFile 是 GLib 库中的一个类,用于表示文件的路径或 URI。GFile 本身并没有提供直接获取文件名的方法,但你可以通过 GFile 的 get_path() 方法获取文件的完整路径,然后从中提取出文件名。

yushuoqi的博客 7148

c语言库函数itof,【C语言】使用glib库函数操作配置档案

最近有个案子需要检测系统是否为正常关机,使用读写文件的方式实现,主要使用到了glib库函数,下面是code片段,其中AP_CONFIG_FILE_PATH定义如下:#define AP_CONFIG_FILE_PATH "/usr/share/archer/ap_checker.conf"配置文档“ap_checker.conf”的内容为:[ap_checker]power_off_normal=...

weixin_39673601的博客 380

读取带有标记文件的函数接口。

*引用本文请注明来自 blog.youkuaiyun.com/wtz1985             g_key_file_new()和g_key_file_load_from_file()这两个接口的含义有些像FILE* fp和fopen(),但是它们有着特别的地方,就是它在读文件的时候,不是什么都读取的。而是根据自己识别的标记读取,然后根据相应的接口函数分离出组(group)、关键字(key)和关键字的值

阿堂的专栏 2437

Glib系统学习

1. 解析配置文件 gkeyfile.c/gkeyfile.h 1.1 三个对象 config_file --load--> GKeyFile --init--> 自定义对象(保存key和其他成员) 1.2 如何设计 config_file: "\n" "\0" "#" <- comment(key=NULL) ...

shentong1的专栏 808

十、GkeyFile

1 Ini配置文件   程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件;配置文件有很多种,如INI配置文件,XML配置文件,cfg配置文件,还有就是可以使用系统注册表等。   INI就是英文“initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是“.ini”也可以是“.cfg”,“.conf”,".txt"。windows系统中,也存在这类文件,通常后缀名“.

Creationyang的博客 650

Using GLib's GKeyFile Parser (使用Glib解析配置文件)

Using GLib's GKeyFile Parser(使用Glib解析配置文件)原文地址:http://www.gtkbook.com/tutorial.php?page=keyfile(by:keyoflov  2011-5-5)Key File Structure     Glib中的key file类似于windows下的.ini。数据被分成组,小组名使用[]表示,例如:[usename]表示一个名为usename的组;以 $ 开头的为注释。     Key files的类型为GKeyfile,

keyoflov的专栏 7157

glib 学习笔记1,读取程序配置文件

glib 学习笔记,读取程序配置文件转载请联系作者:fanyuanmail@126.com有时在写一个程序时经常会从一个配置文件中读取一系列的参数,在度bluez代码时发现了一个非常好的方法。这个方法基于glib-2.0,例如要从名为main.conf中读取里面的配置值。offmode = NoScanpagetimeout = 8192age = 26  1 [G

877
上一篇: TTCN-3核心语言第一章与第二章
下一篇: ubuntu 安装qq的方法,并解决乱码
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值