主程序起动后,使用Options对像来处理命令行参数,所有支持的参数在options.cxx:struct
OptionDesc结构中定义, 该结构还定义的参数的类型, 类型是OPTION_CHANNEL的都是IO子系统的。 通过在Options::init() -> parseOption()->addOption()将参数以参数名、参数值创建一个
OptionValue对像实例,保存到一个vector中。 然后主程序调用Options::processOptions() -> Optons:
ptionsPrivate::processOption()来处理每个参数。如果参数类型为OPTION_CHANNEL,就将其添加到全局的FGGlobals::channel_options_list中,至此参数处理完成。 主程序在fg_init.cxx:fgInitSubssytems()中加载各个子系统,其中就包括FGIO子系统,最后调用 globals.get_subsystem_mgr().init()初始化所有注册的子系统,对于IO子系统来说,前面已经将从参数指定的要启动的IO协议保存到了列表中,在FGIO::init()中遍历已经从命令行分析到的要使用的IO协议的信息, 根据参数指定的协议创建相应的IO协议的实例,见FGIO::parse_port_config()函数. 每种协议参数配置不尽相同,后面在说.