c - 使用 glib 从配置文本中读取值

标签 c configuration glib

我有以下 Config.cfg

[Power]
Power8=8
Temp=5=1001
Hum=7=1002
Link=8=1003
Vol=9=1004

[Power]
Power10=10
Temp=5=1012
Hum=7=1013
Link=8=1014
Vol=9=1015

并且通过 glib 的使用,我想读取每个 Power 的值。我想要类似'if Power8=8 then return temp, hum, Link, Vol'之类的东西,否则 Power10=10 也一样

我写了这个函数

int read_config()
{

 GKeyFile *keyfile;
 GKeyFileFlags flags;
 GError *error = NULL;
 gsize length;
 gchar *temperatura, *humedad, *link, *voltage;


 // Create a new GKeyFile object and a bitwise list of flags.
 keyfile = g_key_file_new ();
 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;

 // Load the GKeyFile from keyfile.conf or return.
 if (!g_key_file_load_from_file (keyfile, "/home/pi/Desktop/Config.cfg", flags, &error))
 {
   g_error (error->message);
   return -1;
 }
  printf("[Power]\n");
 if(g_key_file_get_integer(keyfile,"Power","Power8",NULL) == 8)
 {
   temperatura=g_key_file_get_string(keyfile,"Power","Temp",NULL);
   humedad=g_key_file_get_string(keyfile,"Power","Hum",NULL);
   link=g_key_file_get_string(keyfile,"Power","Link",NULL);
   voltage=g_key_file_get_string(keyfile,"Power","Volt",NULL);
   printf("Power8:%d\n",g_key_file_get_integer(keyfile,"Power","Power8",NULL));
   printf("Temp:%s\n",temperatura);
   printf("Hum:%s\n",humedad);
   printf("Link:%s\n",link);
   printf("Vol:%s\n",voltage);
 }
else
 {
   temperatura=g_key_file_get_string(keyfile,"Power","Temp",NULL);
   humedad=g_key_file_get_string(keyfile,"Power","Hum",NULL);
   link=g_key_file_get_string(keyfile,"Power","Link",NULL);
   voltage=g_key_file_get_string(keyfile,"Power","Volt",NULL);
   printf("Power10:%d\n",g_key_file_get_integer(keyfile,"Power","Power10",NULL));
   printf("Temp:%s\n",temperatura);
   printf("Hum:%s\n",humedad);
   printf("Link:%s\n",link);
   printf("Vol:%s\n",voltage);
 }

}

但它返回 Power10 和 Vol=(Null) 的值

[Power]
Power8=8
Temp=5=1012
Hum=7=1013
Link=8=1014
Vol=(Null)

这里有什么问题?

最佳答案

The documentation明确指出:

Note that in contrast to the Desktop Entry Specification, groups in key files may contain the same key multiple times; the last entry wins. Key files may also contain multiple groups with the same name; they are merged together.

因此,您的文件不是有效的 glib key 文件,因为它试图多次定义相同的 key ,期望每个组都是一个“对象”。不幸的是,事情并非如此。

Vol 问题似乎只是错误的 key ,您正在调用 "Volt" 但文件具有 Vol

关于c - 使用 glib 从配置文本中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17444865/

相关文章:

c - 在不更改 API 且未收到警告的情况下将 const char* 转换为 char* 的正确方法是什么

linux - 不满足在 Beaglebone 上按下按钮的 GIOCondition G_IO_PRI

java - Struts2中validate和model方法获取属性值的区别

android - 运行配置的目标选项卡中缺少 AVD

c - 使用 glib typedef(gint 等)的目的是什么?

c - 理解递归函数时遇到问题

c - OpenGL 3.3 不会绘制我的三角形

c++ - 在 8 字节边界上对齐 double ?

c - 如果 % 在 printf 的格式字符串中没有跟一个合适的字符怎么办?

linux - 如何使用 dhclient 将供应商特定选项传递到 DHCP 服务器?