⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugin.c

📁 思科路由器仿真器,用来仿7200系列得,可以在电脑上模拟路由器
💻 C
字号:
/* * Cisco router simulation platform. * Copyright (c) 2007 Christophe Fillot (cf@utc.fr) * * Plugin management. */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <signal.h>#include <fcntl.h>#include <assert.h>#include <dlfcn.h>#include "utils.h"#include "plugin.h"/* Plugin list */static struct plugin *plugin_list = NULL;/* Find a symbol address */void *plugin_find_symbol(struct plugin *plugin,char *symbol){   return((plugin != NULL) ? dlsym(plugin->dl_handle,symbol) : NULL);}/* Initialize a plugin */static int plugin_init(struct plugin *plugin){   plugin_init_t init;   if (!(init = plugin_find_symbol(plugin,"init")))      return(-1);   return(init());}/* Load a plugin */struct plugin *plugin_load(char *filename){   struct plugin *p;   if (!(p = malloc(sizeof(*p))))      return NULL;   memset(p,0,sizeof(*p));   if (!(p->filename = strdup(filename)))      goto err_strdup;   if (!(p->dl_handle = dlopen(filename,RTLD_LAZY))) {      fprintf(stderr,"plugin_load(\"%s\"): %s\n",filename,dlerror());      goto err_dlopen;   }   if (plugin_init(p) == -1)      goto err_init;   p->next = plugin_list;   plugin_list = p;   return p; err_init:   dlclose(p->dl_handle); err_dlopen:   free(p->filename); err_strdup:   free(p);   return NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -