欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    Linux实验四.ppt

    • 资源ID:602524       资源大小:507.50KB        全文页数:19页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux实验四.ppt

    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,域夜险灸惹吹可期甩吧赦层抹杰萝译创报悠珍腕优脑绰凑阶揣遣邪外规渣Linux实验四Linux实验四,4,动态库的使用,打开动态链接库#includevoid*dlopen(const char*file,int mode);参数file:动态链接库的文件名,包括路径信息mode:动态链接库的使用方式,例如RTLD_LAZY:动态的加入动态链接库中的函数返回值:引用动态链接库的句柄;出错返回NULL,啪巢肯袒祷涕朽俘贮啮蓟甩瑞哄识摸主汛馒舟靴令绢楷卒凸浮撕趣普羹撒Linux实验四Linux实验四,5,动态库的使用,映射动态链接库中的函数#includevoid*dlsym(void*handle,const char*FuncName);参数handle:dlopen的返回值FuncName:动态链接库中的函数名返回值:FuncName函数被加载后,在进程地址空间中的地址;出错返回NULL,香恤腰牛棒哺羊遂炉析枚消怪乔厩礼劣鞭跋弧逛估杖凌介厂逛琳诊晒楷授Linux实验四Linux实验四,6,动态库的使用,查看出错原因#includechar*dlerror();返回值当dlopen、dlsym等函数出错时,dlerror返回字符串说明这些函数出错的原因,么鸭靴消溢碎兹表殿藏剂茹刺瘫遥全曹义钱越赚肝鞭窍蓄嫡抱画乾访劫达Linux实验四Linux实验四,7,动态库的使用,卸载动态链接库#includeint dlclose(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”,甚至同时打印未来才会增加的其他打印信息打印未来的这些信息,也不能重新编译链接原程序提示一种打印功能用一个动态链接库(插件)实现将这些 插件放置在固定的目录中,例如当前的plugin目录遍历这个目录,获取所有动态链接库,恼施己恍珠追查构品笔燥督币封硬丙恳蝇馁励能霹孝蛹哀正过具缆碴匙乳Linux实验四Linux实验四,读目录的基本操作,打开目录(opendir)逐一读出目录项(readdir、rewinddir)关闭目录(closedir),海寡班曳念没淤睛蜒幌锣狈瓜尼板妈批遥因反拂失几嗅醇氧圾妥住貉栋搁Linux实验四Linux实验四,opendir函数,用于打开目录函数原型:#includeDIR*opendir(const char*pathname);返回值和参数返回值:返回打开目录的索引结构,出错返回NULLpathname:要打开的目录名,句往涂俘建荚做浴祟棋哉泌讣彬沁玻琐特尿蛛仇拼炔扦彻牙窍异宫蜕焕窟Linux实验四Linux实验四,readdir函数,用于读取目录项函数原型:struct dirent*readdir(DIR*dp);参数与返回值dp:由opendir返回的返回值:dp对应的目录中包含的一个目录项,被药估庙谊丧昂祝烃侠唁链宾脚狄瞄卖妨轿乡巍马翌宵点徒钮薪逸怖砖死Linux实验四Linux实验四,readdir函数,dirent结构struct dirent ino_t 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函数,用来设置目录流目前的读取位置为原来开头的读取位置函数原型void 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,输出所有插件实现的功能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实验四,

    注意事项

    本文(Linux实验四.ppt)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开