欢迎来到天天文库
浏览记录
ID:27095093
大小:315.00 KB
页数:19页
时间:2018-12-01
《《linux实验四》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux环境高级编程实验李林电子科技大学软件学院实验四插件框架版本1要求:开发一个程序,向屏幕打印“HelloWorld”;在不重新编译链接原程序的前提下,将打印的文字改为“HelloChina”提示:使用动态链接库实现打印功能动态库的编写示例(4.1)动态库的编写#g++-fpic–shared–olibtest.soa1.cppa2.cpp生成libtest.so3动态库的使用打开动态链接库#includevoid*dlopen(constchar*file,intmode);参数fil
2、e:动态链接库的文件名,包括路径信息mode:动态链接库的使用方式,例如RTLD_LAZY:动态的加入动态链接库中的函数返回值:引用动态链接库的句柄;出错返回NULL4动态库的使用映射动态链接库中的函数#includevoid*dlsym(void*handle,constchar*FuncName);参数handle:dlopen的返回值FuncName:动态链接库中的函数名返回值:FuncName函数被加载后,在进程地址空间中的地址;出错返回NULL5动态库的使用查看出错原因#includ
3、echar*dlerror();返回值当dlopen、dlsym等函数出错时,dlerror返回字符串说明这些函数出错的原因6动态库的使用卸载动态链接库#includeintdlclose(void*handle);参数handle:dlopen的返回值动态库使用者的编译#g++-otesttest.cpp–ldl#test出错?7运行出错的原因动态库导出函数的变形查看动态库导出的函数#nmlibtest.sof函数实际上在动态库中的名字是:_Z1fv8实验四插件框架版本2要
4、求:同时要打印“HelloWorld”,打印“HelloChina”,甚至同时打印未来才会增加的其他打印信息打印未来的这些信息,也不能重新编译链接原程序提示一种打印功能用一个动态链接库(插件)实现将这些插件放置在固定的目录中,例如当前的plugin目录遍历这个目录,获取所有动态链接库9读目录的基本操作打开目录(opendir)逐一读出目录项(readdir、rewinddir)关闭目录(closedir)opendir函数用于打开目录函数原型:#includeDIR*opendir(cons
5、tchar*pathname);返回值和参数返回值:返回打开目录的索引结构,出错返回NULLpathname:要打开的目录名readdir函数用于读取目录项函数原型:structdirent*readdir(DIR*dp);参数与返回值dp:由opendir返回的返回值:dp对应的目录中包含的一个目录项readdir函数dirent结构structdirent{ino_td_ino;//索引节点号chard_name[NAME_MAX+1];//文件名................}获得目录下的所有文件DIR
6、*dir;structdirent*ptr;dir=opendir("/etc/rc.d");while((ptr=readdir(dir))!=NULL){printf("d_name:%s",ptr->d_name);}rewinddir函数用来设置目录流目前的读取位置为原来开头的读取位置函数原型voidrewinddir(DIR*dp);参数dp:由opendir返回closedir函数用于关闭目录函数原型:intclosedir(DIR*dp);参数与返回值dp:由opendir返回返回值:成功返回
7、0,出错返回-1实验四插件框架版本3要求:版本2是同时调用所有插件的打印功能,现在要求一次只调用一种功能提示3-1:通过命令行方式:./a.outhelp,输出所有插件实现的功能ID,以及该功能ID对应的功能描述(参考代码3)3-2:通过命令行方式:./a.outFuncID,调用具体打印功能(每个插件导出GetID接口)(参考代码4)17实验四插件框架版本4要求:在版本3中,插件导出了Print、GetID、Help三个函数,主程序需要使用多个容器分别保存这些函数地址在复杂的业务逻辑中,导出的函数可能更多,若
8、还按照版本3的方式,代码维护性不佳提示:将三个导出函数都放在一个类中,让插件外部获取该类的对象参考代码518综合练习现在需要实现一个软件系统,该系统可对文件进行统计分析。究竟对文件进行什么样的统计分析,最终用户自己也不是很清楚,目前只知道需要统计文件的行数。也就是说,本软件系统将会随时面临,增加文件统计新功能的难题。请结合本实验内容,设计并实现这样一个面向文件统计功能的插件系统。(需要
此文档下载收益归作者所有