欢迎来到天天文库
浏览记录
ID:27555791
大小:86.63 KB
页数:11页
时间:2018-12-04
《linux操作系统-链表的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、新乡營淀针真机与信息工超嗲觉实验报告课程名称操作系统原理专业计算机科学与技术班级3班学号2013052701xx姓名XXX实验成绩任课教师XXX2013年12月3日实验名称链表的应用姓名XXX成绩实验地点A14-322实验时间2013年12月3日一、实验目的与要求实验目的:进一步熟悉linux中链表的应用实验要求:认真二、操作步骤1、编写list.c文件代码,代码如下:#include#include#include#include2、listh>MODULE_LICENSECGPLH);MODULE_AUTHOR("XIYOU”);#defineN10//链表节点structnumlist{intnum;//数据structlist_headlist;};structnumlistnumhead;//头节点staticint_initdoublelist_init(void)//初始化头节点structnumlist*listnode;structlist_head*pos;structnumlist*p;inti;printk(,fdoublelistissta3、rting...">;INIT_LIST_HEAD(&numhead.list);//建立N个节点,依次加入到链表当中for(i=0;inum=i+1;list_add_tail(&Iistnode->Iist,&numhead.list);printk(MNode%dhasaddedtoth4、edoublelist...",i+1);}//遍历链表list_for_each(pos,&numhead.list){p=list_entry(pos,structnumlist,list);printk(”Node%(Tsdata:%dn,i,p->num);return0;}staticvoid_exitdoublelist一exit(void){structlist一head*pos,*n;structnumlist*p;inti;//依次删除N个节点i=l;list_for_each_safe(pos,n,&num5、head.list){//为了安全删除节点而进行的遍历list_del(pos);//从双链表中删除当前节点p=Iist_entry(pos,structnumlist,list);//得到当前数据节点的首地址,即指针kfree(p);//释放该数据节点所占空间printk("Node%dhasremovedfromthedoublelist.i++);}printk("doublelistisexiting.An");module_init(doublelist_init);module_exit(doublelist_exit);6、2.编写Makefile文件代码,代码如下:obj-m:=list.o#产生list模块的目标文件CURRENT_PATH:=$(shellpwd)#模块所在的当前路径LINUX_KERNEL:=$(shelluname-r)#Linux内核源代码的当前版本LINUX_KERNEL_PATH:=/lib/modules/$(shelluname-r)/build#Linux内核源代码的绝对路径all:make-C$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)modules#编译模块clean:make-C$7、(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)clean#清理3、行编译:在list.c和Makefile文件的当前路径执行make命令。得到模块文件。4、加载模块:依然是在当前路径执行insmodlist.ko5、查看模块列表:执行命令Ismod6、卸载模块:执行命令rmmodlist7、査看输出信息:执行tail命令三、实验结果1.在模块文件list.c和Makefile当前打幵终端,输入make命令之后,所在的文件会编译出其他文件[root@localhost桌面]#Is123list.kolist.o8、Makefile〜tools2.c〜listko.unsignedlist.txt〜modules.order第二个实骑listxlist.mod.clist.c〜list.mod.ohellomod.c〜Module.
2、listh>MODULE_LICENSECGPLH);MODULE_AUTHOR("XIYOU”);#defineN10//链表节点structnumlist{intnum;//数据structlist_headlist;};structnumlistnumhead;//头节点staticint_initdoublelist_init(void)//初始化头节点structnumlist*listnode;structlist_head*pos;structnumlist*p;inti;printk(,fdoublelistissta
3、rting...">;INIT_LIST_HEAD(&numhead.list);//建立N个节点,依次加入到链表当中for(i=0;inum=i+1;list_add_tail(&Iistnode->Iist,&numhead.list);printk(MNode%dhasaddedtoth
4、edoublelist...",i+1);}//遍历链表list_for_each(pos,&numhead.list){p=list_entry(pos,structnumlist,list);printk(”Node%(Tsdata:%dn,i,p->num);return0;}staticvoid_exitdoublelist一exit(void){structlist一head*pos,*n;structnumlist*p;inti;//依次删除N个节点i=l;list_for_each_safe(pos,n,&num
5、head.list){//为了安全删除节点而进行的遍历list_del(pos);//从双链表中删除当前节点p=Iist_entry(pos,structnumlist,list);//得到当前数据节点的首地址,即指针kfree(p);//释放该数据节点所占空间printk("Node%dhasremovedfromthedoublelist.i++);}printk("doublelistisexiting.An");module_init(doublelist_init);module_exit(doublelist_exit);
6、2.编写Makefile文件代码,代码如下:obj-m:=list.o#产生list模块的目标文件CURRENT_PATH:=$(shellpwd)#模块所在的当前路径LINUX_KERNEL:=$(shelluname-r)#Linux内核源代码的当前版本LINUX_KERNEL_PATH:=/lib/modules/$(shelluname-r)/build#Linux内核源代码的绝对路径all:make-C$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)modules#编译模块clean:make-C$
7、(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)clean#清理3、行编译:在list.c和Makefile文件的当前路径执行make命令。得到模块文件。4、加载模块:依然是在当前路径执行insmodlist.ko5、查看模块列表:执行命令Ismod6、卸载模块:执行命令rmmodlist7、査看输出信息:执行tail命令三、实验结果1.在模块文件list.c和Makefile当前打幵终端,输入make命令之后,所在的文件会编译出其他文件[root@localhost桌面]#Is123list.kolist.o
8、Makefile〜tools2.c〜listko.unsignedlist.txt〜modules.order第二个实骑listxlist.mod.clist.c〜list.mod.ohellomod.c〜Module.
此文档下载收益归作者所有