Linux实验四

上传人:沙** 文档编号:243077353 上传时间:2024-09-15 格式:PPT 页数:19 大小:315KB
返回 下载 相关 举报
Linux实验四_第1页
第1页 / 共19页
Linux实验四_第2页
第2页 / 共19页
Linux实验四_第3页
第3页 / 共19页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,Linux,环境高级编程实验,李 林,电子科技大学 软件学院,实验四 插件框架,版本,1,要求:,开发一个程序,向屏幕打印“,Hello World”,;,在不重新编译链接原程序的前提下,将打印的文字改为“,Hello China”,提示:,使用动态链接库实现打印功能,动态库的编写,示例(,4.1,),动态库的编写,#g+ -,fpic,shared o,libtest.so,a1.cpp a2.cpp,生成,libtest.so,3,动态库的使用,打开动态链接库,#include,void *,dlopen(const,char *file,int,mode);,参数,file,:动态链接库的文件名,包括路径信息,mode,:动态链接库的使用方式,例如,RTLD_LAZY,:动态的加入动态链接库中的函数,返回值:引用动态链接库的句柄;出错返回,NULL,4,动态库的使用,映射动态链接库中的函数,#include,void *,dlsym(void,*handle, const char *,FuncName,);,参数,handle,:,dlopen,的返回值,FuncName,:动态链接库中的函数名,返回值:,FuncName,函数被加载后,在进程地址空间中的地址;出错返回,NULL,5,动态库的使用,查看出错原因,#include,char *,dlerror,();,返回值,当,dlopen,、,dlsym,等函数出错时,,dlerror,返回字符串说明这些函数出错的原因,6,动态库的使用,卸载动态链接库,#include,int,dlclose(void,*handle);,参数,handle,:,dlopen,的返回值,动态库使用者的编译,#g+ -o test,test.cpp,ldl,#test,出错?,7,运行出错的原因,动态库导出函数的变形,查看动态库导出的函数,#nm,libtest.so,f,函数实际上在动态库中的名字是:,_Z1fv,8,实验四 插件框架,版本,2,要求:,同时要打印“,Hello World”,,打印“,Hello China”,,甚至同时打印未来才会增加的其他打印信息,打印未来的这些信息,也不能重新编译链接原程序,提示,一种打印功能用一个动态链接库(插件)实现,将这些 插件放置在固定的目录中,例如当前的,plugin,目录,遍历这个目录,获取所有动态链接库,9,读目录的基本操作,打开目录(opendir,),逐一读出目录项(readdir、rewinddir,),关闭目录(closedir,),opendir函数,用于打开目录,函数原型,:,#include,DIR*,opendir(const,char* pathname);,返回值和参数,返回值:返回打开目录的索引结构,出错返回NULL,pathname:要打开的目录名,readdir函数,用于读取目录项,函数原型,:,struct,dirent,*,readdir(DIR,*,dp,);,参数与返回值,dp:由opendir返回的,返回值:dp对应的目录中包含的一个目录项,readdir函数,dirent结构,struct,dirent,ino_t,d_ino,; /,索引节点号,char,d_nameNAME_MAX,+ 1; /,文件名,.,获得目录下的所有文件,DIR *,dir,;,struct,dirent,*,ptr,;,dir=,opendir(/etc/rc.d,);,while(ptr,=,readdir(dir,)!=NULL),printf(d_name,: %,sn,ptr,-,d_name,);,rewinddir函数,用来设置目录流目前的读取位置为原来开头的读取位置,函数原型,void,rewinddir(DIR,*,dp,);,参数,dp:由opendir返回,closedir函数,用于关闭目录,函数原型,:,int,closedir(DIR,*,dp,);,参数与返回值,dp:由opendir返回,返回值:成功返回0,出错返回-1,实验四 插件框架,版本,3,要求:,版本,2,是同时调用所有插件的打印功能,现在要求一次只调用一种功能,提示,3-1,:通过命令行方式:,./,a.out,help,,输出所有插件实现的功能,ID,,以及该功能,ID,对应的功能描述(参考代码,3,),3-2,:通过命令行方式:,./,a.out,FuncID,,调用具体打印功能(每个插件导出,GetID,接口)(参考代码,4,),17,实验四 插件框架,版本,4,要求:,在版本,3,中,插件导出了,Print,、,GetID,、,Help,三个函数,主程序需要使用多个容器分别保存这些函数地址,在复杂的业务逻辑中,导出的函数可能更多,若还按照版本,3,的方式,代码维护性不佳,提示:,将三个导出函数都放在一个类中,让插件外部获取该类的对象,参考代码,5,18,综合练习,现在需要实现一个软件系统,该系统可对文件进行统计分析。究竟对文件进行什么样的统计分析,最终用户自己也不是很清楚,目前只知道需要统计文件的行数。也就是说,本软件系统将会随时面临,增加文件统计新功能的难题。请结合本实验内容,设计并实现这样一个面向文件统计功能的插件系统。(需要实现的插件包括:统计某个文件的行数,统计某个文件的字节数),19,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!