0

我正在做一些 C 编码,但我无法永久存储 g_settings!

#include <stdlib.h>
#include <locale.h>


#include <gio/gio.h>
int main(int argc, char **argv)
{
  GSettings *settings;
  g_type_init();
  settings = g_settings_new ("org.nemo.desktop");
  printf("%s\n", g_settings_get_string(settings, "font"));
  g_settings_set (settings, "font", "s", "Arial");
  if (g_settings_get_has_unapplied (settings)) printf("X");
  printf("%s\n", g_settings_get_string(settings, "font"));
  return 0;
}

尝试 Linux Mint 13 Cinnamon(路径等是正确的)。

4

2 回答 2

1

这不是一个最小的工作示例。你能提供你正在使用的架构文件吗?

gcc `pkg-config --cflags --libs gio-2.0` -o temp temp.c使用以下架构编译代码:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
    <schema id="org.nemo.desktop" path="/org/nemo/desktop/">
        <key name="font" type="s">
            <default>''</default>
            <summary>Summary</summary>
            <description>Description.</description>
        </key>
    </schema>
</schemalist>

我安装了:

sudo cp org.nemo.desktop.gschema.xml /usr/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

我得到以下输出,这似乎是正确的:

Arial
于 2013-11-04T22:36:19.770 回答
1

哦,我一开始看错了你的代码......我相信g_settings_sync ()如果你想确保你的更改被写入磁盘,你应该打电话。显然,如果您在没有主循环的情况下运行(例如在您的示例案例中),则确实需要将东西放在磁盘上。

所以,要明确一点:带有 glib 主循环的普通应用程序不需要(也不应该真正使用)同步调用。

于 2013-11-05T12:39:07.267 回答