标签: glib

使用 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
Run Code Online (Sandbox Code Playgroud)

通过使用 glib,我想读取每个 Power 的值。我想要类似“如果 Power8=8 则返回 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); …
Run Code Online (Sandbox Code Playgroud)

c configuration glib

0
推荐指数
1
解决办法
4261
查看次数

g_socket_new 的 Glib 链接错误

我正在尝试为网络项目学习 glib 和 gObject。

这是用于编译的命令(使用 pkg-config 获取输出后):

gcc socket1.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgobject-2.0 -lglib-2.0
Run Code Online (Sandbox Code Playgroud)

socket1.c,剥离后,找出问题是:

 #include <glib.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <gio/gio.h>

 static  GSocket *mySocket;
 int main(int argc, char **argv) {

   GError *err1 = NULL;

   mySocket = g_socket_new ( G_SOCKET_FAMILY_IPV4,
                 G_SOCKET_TYPE_STREAM,
                 G_SOCKET_PROTOCOL_TCP,
                 &err1);

 }
Run Code Online (Sandbox Code Playgroud)

错误是:

  /tmp/ccKIEXOi.o: In function `main':
  socket1.c:(.text+0x3d): undefined reference to `g_socket_new'
  collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我尝试使用readelf -Wsnm来查看是否可以在链接的任何 .so 文件中看到 g_new_socket 。我没有看到任何。我需要链接到一个单独的图书馆吗?它在哪里/哪个?

gobject glib gio

0
推荐指数
1
解决办法
692
查看次数

GObject与继承

我在做的油嘴一些严重的软件。我意识到有些主题我不太了解。IRC也无济于事...

当我们进行继承时,我们可以有两个类。第一个A直接从GObject继承,B直接从A继承。然后我来到这里:

https://developer.gnome.org/gobject/stable/chapter-gobject.html

static void
viewer_file_constructed (GObject *obj)
{
  /* update the object state depending on constructor properties */

  /* Always chain up to the parent constructed function to complete object
   * initialisation. */
  G_OBJECT_CLASS (viewer_file_parent_class)->constructed (obj);
}

static void
viewer_file_class_init (ViewerFileClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);

  object_class->constructed = viewer_file_constructed;
}
Run Code Online (Sandbox Code Playgroud)

但是,当你有这样的安排。子类执行此操作:object_class-> constructed = viewer_file_constructed; 实际上,在B覆盖中唯一构造的内存地址。因此,这意味着G_OBJECT_CLASS(viewer_file_parent_class)-> constructed(obj); 将调用B->递归构成。这不是我们想要的。

也许我听不懂,但我想B中的内存结构是这样的:

struct _B
{
  A parent_instance;

  /* instance members */
};
Run Code Online (Sandbox Code Playgroud)

内部表示应类似于:

[   Gobject struct memory ]
[                         ]
[ …
Run Code Online (Sandbox Code Playgroud)

inheritance gobject glib

0
推荐指数
1
解决办法
687
查看次数

使用`g_object_set_data`传递用户名

我正在使用g_object_set_dataevent_box设置用户名,所以在回调中我可以在event_box指针中获取它.

g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) );
Run Code Online (Sandbox Code Playgroud)

但问题是我设置的user_name不是指针分配的字符串.
它是一个本地字符串(未在臀部分配)被破坏.

所以有必要分配然后使用指针,我只想将一个名称与此event_box关联.

gtk gobject glib

-1
推荐指数
1
解决办法
1547
查看次数

标签 统计

glib ×4

gobject ×3

c ×1

configuration ×1

gio ×1

gtk ×1

inheritance ×1