在skynet_start.c文件中的skynet_start函数调用了skynet_module.c文件中的skynet_module_init函数对需要加载的动态库进行了相应的初始化,skynet_module_init函数的参数默认为动态库的路径"./cservice/?.so",动态库的信息保存在全局变量M中:
//初始化需要加载的动态库的路径
void skynet_module_init(const char *path) {
struct modules *m = skynet_malloc(sizeof(*m));
m->count = 0;
m->path = skynet_strdup(path); //copy一份path
SPIN_INIT(m)
M = m;
}
上述代码中涉及的模块的结构体modules为:
struct modules {
int count; //记录已经加载的动态库的数量
struct spinlock lock; //锁
const char * path; //需要加载的动态库的路径
struct skynet_module m[MAX_MODULE_TYPE]; //加载的动态库的信息,最多可以加载32个
};
struct skynet_module {
const char * name; //动态库名
void * module; //打开的库文件指针
skynet_dl_create create; //存储动态连接库中以库文件名_create的API函数指针
skynet_dl_init init; //存储动态