QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1497|回复: 2

求助skyeye源码中的一个问题!

[复制链接]
发表于 2009-11-12 15:46:03 | 显示全部楼层 |阅读模式
在skyeye1.2.9中定义了一个全局变量:
static skyeye_option_t* skyeye_option_list;
skyeye利用函数register_option把一些函数注册到该链表中,比如:
register_option("mem_bank", do_mem_bank_option, "");
可以多次利用register_option来把多个函数注册到skyeye_option_list中。

对于skyeye_option_list我有个疑问,skyeye是在哪里,怎样利用skyeye_option_list来完成
do_mem_bank_option等已经注册函数的调用的?
这个问题一直得不到解决,望请指教。谢谢!
发表于 2009-11-13 10:15:33 | 显示全部楼层
在parse_line_formatted函数,如一下代码,对于配置文件的每一个选项,调用此函数,进行字符串比较。看看是否符合注册的sop中的name变量。然后调用sop中的相应的函数进行解析.
        skyeye_option_t *sop;
        //int len = sizeof (skyeye_options) / sizeof (skyeye_option_t);
        int retval = 0;
        if(skyeye_option_list == NULL)
                return 0;
        sop = skyeye_option_list;
        if (num_params < 1)
                return 0;

        while(sop != NULL){
                if (!strncmp (sop->option_name, params[0], MAX_OPTION_NAME)) {
                        if (retval = sop->do_option (sop, num_params - 1,
                                                          &params[1]) < 0) {
                                fprintf (stderr,
                                         "\"%s\" option parameter error!\n",
                                         params[0]);
                                return retval;
                        }
                        else
                                return retval;

                }
                sop = sop->next;
        }
        fprintf (stderr, "Unkonw option: %s\n", params[0]);
        return -1;
回复

使用道具 举报

 楼主| 发表于 2009-11-13 15:55:40 | 显示全部楼层
嗯,已明白。多谢管理员指点。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-24 10:47 , Processed in 0.039360 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表