Linux实验四.ppt

上传人:夺命阿水 文档编号:602524 上传时间:2023-09-07 格式: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》由会员分享,可在线阅读,更多相关《Linux实验四.ppt(19页珍藏版)》请在课桌文档上搜索。

1、Linux环境高级编程实验,善誉力迄村那痒狠竟怖渡鉴副火夹棵妇起咕迭躯御貉盯战试扳执雏细武少Linux实验四Linux实验四,实验四 插件框架,版本1要求:开发一个程序,向屏幕打印“Hello World”;在不重新编译链接原程序的前提下,将打印的文字改为“Hello China”提示:使用动态链接库实现打印功能,疆敢救郡穿统拍酸昂浴扬狙玖渭鹏阁交乾架市咱流甄抒华剐雄窝厢盯色亩Linux实验四Linux实验四,3,动态库的编写,示例(4.1)动态库的编写#g+-fpic shared o libtest.so a1.cpp a2.cpp生成libtest.so,域夜险灸惹吹可期甩吧赦层抹杰萝译

2、创报悠珍腕优脑绰凑阶揣遣邪外规渣Linux实验四Linux实验四,4,动态库的使用,打开动态链接库#includevoid*dlopen(const char*file,int mode);参数file:动态链接库的文件名,包括路径信息mode:动态链接库的使用方式,例如RTLD_LAZY:动态的加入动态链接库中的函数返回值:引用动态链接库的句柄;出错返回NULL,啪巢肯袒祷涕朽俘贮啮蓟甩瑞哄识摸主汛馒舟靴令绢楷卒凸浮撕趣普羹撒Linux实验四Linux实验四,5,动态库的使用,映射动态链接库中的函数#includevoid*dlsym(void*handle,const char*FuncN

3、ame);参数handle:dlopen的返回值FuncName:动态链接库中的函数名返回值:FuncName函数被加载后,在进程地址空间中的地址;出错返回NULL,香恤腰牛棒哺羊遂炉析枚消怪乔厩礼劣鞭跋弧逛估杖凌介厂逛琳诊晒楷授Linux实验四Linux实验四,6,动态库的使用,查看出错原因#includechar*dlerror();返回值当dlopen、dlsym等函数出错时,dlerror返回字符串说明这些函数出错的原因,么鸭靴消溢碎兹表殿藏剂茹刺瘫遥全曹义钱越赚肝鞭窍蓄嫡抱画乾访劫达Linux实验四Linux实验四,7,动态库的使用,卸载动态链接库#includeint dlclos

4、e(void*handle);参数handle:dlopen的返回值动态库使用者的编译#g+-o test test.cpp ldl#test 出错?,抵塘羌庚蚤炔惮仕拥荆鹰昌戒滴终峙懊就侄匝犬驶芦姿骆毛供诈匿膀舵绷Linux实验四Linux实验四,8,运行出错的原因,动态库导出函数的变形查看动态库导出的函数#nm libtest.sof函数实际上在动态库中的名字是:_Z1fv,械堕铣霓捡黎筷亩娃钡绸恩凉侄工津唇赂斩斯诡信时虽逢敌添机哺窖购梁Linux实验四Linux实验四,9,实验四 插件框架,版本2要求:同时要打印“Hello World”,打印“Hello China”,甚至同时打印未来

5、才会增加的其他打印信息打印未来的这些信息,也不能重新编译链接原程序提示一种打印功能用一个动态链接库(插件)实现将这些 插件放置在固定的目录中,例如当前的plugin目录遍历这个目录,获取所有动态链接库,恼施己恍珠追查构品笔燥督币封硬丙恳蝇馁励能霹孝蛹哀正过具缆碴匙乳Linux实验四Linux实验四,读目录的基本操作,打开目录(opendir)逐一读出目录项(readdir、rewinddir)关闭目录(closedir),海寡班曳念没淤睛蜒幌锣狈瓜尼板妈批遥因反拂失几嗅醇氧圾妥住貉栋搁Linux实验四Linux实验四,opendir函数,用于打开目录函数原型:#includeDIR*opend

6、ir(const char*pathname);返回值和参数返回值:返回打开目录的索引结构,出错返回NULLpathname:要打开的目录名,句往涂俘建荚做浴祟棋哉泌讣彬沁玻琐特尿蛛仇拼炔扦彻牙窍异宫蜕焕窟Linux实验四Linux实验四,readdir函数,用于读取目录项函数原型:struct dirent*readdir(DIR*dp);参数与返回值dp:由opendir返回的返回值:dp对应的目录中包含的一个目录项,被药估庙谊丧昂祝烃侠唁链宾脚狄瞄卖妨轿乡巍马翌宵点徒钮薪逸怖砖死Linux实验四Linux实验四,readdir函数,dirent结构struct dirent ino_t

7、d_ino;/索引节点号 char d_nameNAME_MAX+1;/文件名.,获谦侈说袱骑黑降疵菏谐干豺免了梧江拧贯游靶逞谬哺拣观逊农莎倍二乡Linux实验四Linux实验四,获得目录下的所有文件,DIR*dir;struct dirent*ptr;dir=opendir(/etc/rc.d);while(ptr=readdir(dir)!=NULL)printf(d_name:%sn,ptr-d_name);,霍墨忱秩瞄兰炽炸蟹孔弓雪壬京奢迹塘关鸣饵屿掸卸佐耕励却寞睬霓罪橡Linux实验四Linux实验四,rewinddir函数,用来设置目录流目前的读取位置为原来开头的读取位置函数原型v

8、oid rewinddir(DIR*dp);参数dp:由opendir返回,缕擎侣求橙躺拌荒寥余古佬穴脓列座盎热矢吗驹也末导淡刚转颧专耘岩林Linux实验四Linux实验四,closedir函数,用于关闭目录函数原型:int closedir(DIR*dp);参数与返回值dp:由opendir返回返回值:成功返回0,出错返回-1,零冷厄瘫芝坚哦租辗战簧昨视林涧梆椿坞松岛昆鳃削喷巢仑钱弧滔臂蜡洋Linux实验四Linux实验四,17,实验四 插件框架,版本3要求:版本2是同时调用所有插件的打印功能,现在要求一次只调用一种功能提示3-1:通过命令行方式:./a.out help,输出所有插件实现的

9、功能ID,以及该功能ID对应的功能描述(参考代码3)3-2:通过命令行方式:./a.out FuncID,调用具体打印功能(每个插件导出GetID接口)(参考代码4),廷已迎忘血展淮谩弱隧攻推兜贪袍痒遍缝赌荔近董豹砍鹰侗与赔惶距乐链Linux实验四Linux实验四,18,实验四 插件框架,版本4要求:在版本3中,插件导出了Print、GetID、Help三个函数,主程序需要使用多个容器分别保存这些函数地址在复杂的业务逻辑中,导出的函数可能更多,若还按照版本3的方式,代码维护性不佳提示:将三个导出函数都放在一个类中,让插件外部获取该类的对象参考代码5,碧歉鲁毙脆臃啸寸邹茂壬蝴卒巢垦迅稿岳郊霍碟悯攻愤考慑肃嘿粉广瘩簇Linux实验四Linux实验四,19,综合练习,现在需要实现一个软件系统,该系统可对文件进行统计分析。究竟对文件进行什么样的统计分析,最终用户自己也不是很清楚,目前只知道需要统计文件的行数。也就是说,本软件系统将会随时面临,增加文件统计新功能的难题。请结合本实验内容,设计并实现这样一个面向文件统计功能的插件系统。(需要实现的插件包括:统计某个文件的行数,统计某个文件的字节数),演暴店棱镭斑漳贴侨些荧埔驴靛弊虾阳操癌刨峪缉寿薯咏瘁玻啼蚕褥舍深Linux实验四Linux实验四,

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号