Atlas源码学习(二)

您所在的位置:网站首页 闹钟软件图片 Atlas源码学习(二)

Atlas源码学习(二)

2024-06-17 07:11| 来源: 网络整理| 查看: 265

Atlas的配置加载过程中,包括命令行解析,配置文件加载和插件加载的过程都依赖于glibc。之前对于glibc没有了解,因此在这一块的学习过程中赶到有点困难,因此特别在网上学习了一下。这里我们仅给出一些简单的实例,想要深入了解可以去查阅官方文档。首先,命令行解析:使用glibc完成命令行解析依赖于GOptionEntry对象:typedef struct {  const gchar *long_name;  // 命令名字  gchar        short_name;    // 命令名字缩写 如:-n  gint         flags;  GOptionArg   arg;    // GOptionArg枚举的值,即知名该配置的类型  gpointer     arg_data; // 指向解析出的数据

  const gchar *description;  // 参数描述  const gchar *arg_description; //参数占位符说明} GOptionEntry;

实例:static gint t_int;static gboolean t_bool;static gchar* t_string;static GOptionEntry entries ={    {"t_int",'i',0,G_OPTION_ARG_INT,&t_int,"test for int var","N"},    {"t_bool",'b',0,G_OPTION_ARG_NONE,&t_bool,"test for int bool","M"},    {"t_string",'s',0,G_OPTION_ARG_STRING,t_string,"test for int string",NULL},};main (int argc, char *argv[])  {      GError *error = NULL;      GOptionContext *context = NULL;      context = g_option_context_new("- test");      g_option_context_add_main_entries(context, entries, NULL);    //  g_option_context_add_group(context, gtk_get_option_group(TRUE));      if (!g_option_context_parse(context, &argc, &argv, &error)) {          g_print("option parsing failed: %s/n", error->message);          exit (1);      }      g_option_context_free(context);      g_print("Now value is: repeats=%d.", t_int);      return 0;  }  Atlas中对应的代码为if (chassis_frontend_init_base_options(option_ctx,                &argc, &argv,                &(frontend->print_version),                &(frontend->default_file),                &gerr)) {        g_critical("%s: %s",                G_STRLOC,                gerr->message);        g_clear_error(&gerr);

        GOTO_EXIT(EXIT_FAILURE);    }其实际的解析过程在

chassis_frontend_init_base_options

解析配置文件:实际上,Atlas对配置文件的解析被分为了两个过程:加载配置文件,解析参数。加载过程较为简单:假设config.ini中的内容为:[Mysql-Proxy]key = 50

通过如下代码就可以得到key的值:GKeyFile* config = g_key_file_new();g_key_file_load_from_file(config,"config.ini",G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,NULL);//此时,相应的数据已经加载到config对象中gchar* test = g_key_file_get_value(config,"MySql-Proxy","key",NULL);在Atlas中关于配置文件的加载函数调用顺序为:1.frontend->keyfile = chassis_frontend_open_config_file(frontend->default_file, &gerr);//加载配置文件2.chassis_keyfile_to_options(frontend->keyfile, "mysql-proxy", main_entries);//将配置文件中的值储存在main_entries中

插件加载部分内容比较多,想详细了解的可以参阅 http://www.ibm.com/developerworks/cn/linux/l-gtkplgin/。完成插件部分的参数解析之后,Atlas的命令行解析和配置文件读取的工作也就做完了。

0 0 Atlas源码学习(二) Atlas源码剖析(二) Atlas源码学习(一) Atlas源码学习(三) Atlas源码学习(四) Atlas源码学习(五) atlas学习系列之二 atlas学习系列之二(AutoCompleteExtender篇) Atlas学习手记(1):Hello,Atlas Atlas源码剖析(一) Atlas源码剖析(三) Atlas源码剖析(四) Atlas源码剖析(五) Atlas源码剖析(六) Atlas源码剖析(七) Atlas源码剖析(八) Atlas源码剖析(九) Atlas源码剖析(十) Tcl中使用ASCII码解决需要空格符的场景 Spatiotemporal and Weak Model ICA android图片向右滑动 小心IE的按钮单击事件 i++与++i//*p++与*++p Atlas源码学习(二) iOS开发-APP在waiting for review状态时如何重新上传程序 DiskFileItemFactory类用法 C++ 虚函数;重载与覆盖;虚继承 Linux网络编程之多播 cxgrid 和 dxdbgrid的用法 Freescale i.MX283开发平台 MYD-IMX283开发板 打包.a静态库 使用DirectShow的BaseClasses遇到的问题


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3