knpingan 发表于 2009-11-12 15:46:03

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

在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等已经注册函数的调用的?
这个问题一直得不到解决,望请指教。谢谢!:)

ksh 发表于 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, MAX_OPTION_NAME)) {
                        if (retval = sop->do_option (sop, num_params - 1,
                                                          &params) < 0) {
                              fprintf (stderr,
                                       "\"%s\" option parameter error!\n",
                                       params);
                              return retval;
                        }
                        else
                              return retval;

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

knpingan 发表于 2009-11-13 15:55:40

嗯,已明白。多谢管理员指点。:)
页: [1]
查看完整版本: 求助skyeye源码中的一个问题!