Atlas源码学习(二) |
您所在的位置:网站首页 › 闹钟软件图片 › Atlas源码学习(二) |
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 |