Linux实验四.ppt

上传人:王** 文档编号:468854 上传时间:2023-09-08 格式:PPT 页数:19 大小:507.50KB
下载 相关 举报
Linux实验四.ppt_第1页
第1页 / 共19页
Linux实验四.ppt_第2页
第2页 / 共19页
Linux实验四.ppt_第3页
第3页 / 共19页
Linux实验四.ppt_第4页
第4页 / 共19页
Linux实验四.ppt_第5页
第5页 / 共19页
Linux实验四.ppt_第6页
第6页 / 共19页
Linux实验四.ppt_第7页
第7页 / 共19页
Linux实验四.ppt_第8页
第8页 / 共19页
Linux实验四.ppt_第9页
第9页 / 共19页
Linux实验四.ppt_第10页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Linux实验四.ppt》由会员分享,可在线阅读,更多相关《Linux实验四.ppt(19页珍藏版)》请在优知文库上搜索。

1、实验四 插件框架版本1要求:开发一个程序,向屏幕打印“Hello World”;在不重新编译链接原程序的前提下,将打印的文字改为“Hello China”提示:使用动态链接库实现打印功能3动态库的编写 示例(4.1)动态库的编写#g+-fpic shared o libtest.so a1.cpp a2.cpp 生成libtest.so4动态库的使用 打开动态链接库#includevoid*dlopen(const char*file,int mode);参数file:动态链接库的文件名,包括路径信息mode:动态链接库的使用方式,例如RTLD_LAZY:动态的加入动态链接库中的函数返回值:引

2、用动态链接库的句柄;出错返回NULL5动态库的使用 映射动态链接库中的函数#includevoid*dlsym(void*handle,const char*FuncName);参数handle:dlopen的返回值FuncName:动态链接库中的函数名返回值:FuncName函数被加载后,在进程地址空间中的地址;出错返回NULL6动态库的使用 查看出错原因#includechar*dlerror();返回值当dlopen、dlsym等函数出错时,dlerror返回字符串说明这些函数出错的原因7动态库的使用 卸载动态链接库#includeint dlclose(void*handle);参数h

3、andle:dlopen的返回值 动态库使用者的编译#g+-o test test.cpp ldl#test 出错?8运行出错的原因 动态库导出函数的变形 查看动态库导出的函数#nm libtest.so f函数实际上在动态库中的名字是:_Z1fv9实验四 插件框架 版本2要求:同时要打印“Hello World”,打印“Hello China”,甚至同时打印未来才会增加的其他打印信息打印未来的这些信息,也不能重新编译链接原程序 提示一种打印功能用一个动态链接库(插件)实现将这些 插件放置在固定的目录中,例如当前的plugin目录遍历这个目录,获取所有动态链接库读目录的基本操作打开目录(ope

4、ndir)逐一读出目录项(readdir、rewinddir)关闭目录(closedir)opendir函数用于打开目录函数原型:#includeDIR*opendir(const char*pathname);返回值和参数返回值:返回打开目录的索引结构,出错返回NULLpathname:要打开的目录名readdir函数用于读取目录项函数原型:struct dirent*readdir(DIR*dp);参数与返回值dp:由opendir返回的返回值:dp对应的目录中包含的一个目录项readdir函数dirent结构struct dirent ino_t d_ino;/索引节点号 char d_

5、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,出错返回-117实验四

6、插件框架 版本3要求:版本2是同时调用所有插件的打印功能,现在要求一次只调用一种功能 提示3-1:通过命令行方式:./a.out help,输出所有插件实现的功能ID,以及该功能ID对应的功能描述(参考代码3)3-2:通过命令行方式:./a.out FuncID,调用具体打印功能(每个插件导出GetID接口)(参考代码4)18实验四 插件框架 版本4要求:在版本3中,插件导出了Print、GetID、Help三个函数,主程序需要使用多个容器分别保存这些函数地址在复杂的业务逻辑中,导出的函数可能更多,若还按照版本3的方式,代码维护性不佳 提示:将三个导出函数都放在一个类中,让插件外部获取该类的对象参考代码519综合练习 现在需要实现一个软件系统,该系统可对文件进行统计分析。究竟对文件进行什么样的统计分析,最终用户自己也不是很清楚,目前只知道需要统计文件的行数。也就是说,本软件系统将会随时面临,增加文件统计新功能的难题。请结合本实验内容,设计并实现这样一个面向文件统计功能的插件系统。(需要实现的插件包括:统计某个文件的行数,统计某个文件的字节数)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > linux/Unix相关

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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