- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
新乡營淀针真机与信息工超嗲觉
实验报告
课程名称 操作系统原理
专 业 计算机科学与技术
班 级 3班
学 号 2013052701xx
姓 名 XXX
实验成绩
任课教师 XXX
2013年 12月 3日
实验名称
链表的应用
姓 名
XXX
成 绩
实验地点
A14-322
实验时间
2013年12月3日
一、 实验目的与要求
实验目的:进一步熟悉linux中链表的应用
实验要求:认真
二、 操作步骤
1、编写list.c文件代码,代码如下:
#include linux/kernekh
#include linux/module.h
#include linux/slab.h
#include linux/listh
MODULE_LICENSECGPLH);
MODULE_AUTHOR(XIYOU”);
#define N 10 //链表节点
struct numlist {
int num; //数据
struct list_head list;
};
struct numlist numhead; //头节点
static int _init doublelist_init(void)
//初始化头节点
struct numlist *listnode;
struct list_head *pos;
struct numlist *p;
inti;
printk(,fdoublelist is starting...\n;
INIT_LIST_HEAD(numhead.list);
//建立N个节点,依次加入到链表当中
for (i = 0; i N; i++) {
// kmalloc ()listnode = (struct numlist *)kmalloc(sizeof(struct numlist), GFP_KERNEL); 在内核空间申请内存,类似于malloc,参见第四章
// kmalloc ()
listnode-num = i + 1;
list_add_tail(Iistnode-Iist, numhead.list);
printk(MNode %d has added to the doublelist...\n, i + 1);
}
//遍历链表
list_for_each(pos,numhead.list) {
p = list_entry(pos,struct numlist,list);
printk(”Node %(Ts data:%d\nn,i,p-num);
return 0;
} static void _exit doublelist一exit(void)
{
struct list一head *pos,*n;
struct numlist *p;
int i;
//依次删除N个节点
i = l;
list_for_each_safe(pos, n, numhead.list) { //为了安全删除节点而进行的遍历
list_del(pos); //从双链表中删除当前节点
p = Iist_entry(pos, struct numlist,list); //得到当前数据节点的首地址,即指针
kfree(p); //释放该数据节点所占空间
printk(Node %d has removed from the doublelist.i++);
}
printk(doublelist is exiting.An);
module_init(doublelist_init);
module_exit(doublelist_exit);
2.编写Makefile文件代码,代码如下:
obj-m :=list.o #产生list模块的目标文件
CURRENT_PATH :=$(shell pwd) #模块所在的当前路径
LINUX_KERNEL :=$(shell uname -r)
#Linux内核源代码的当前版本
LINUX_KERNEL_PATH :=/lib/modules/$(shell uname -r)/build
#Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean #清理
3、 行编译:在list.c和Makefile文件的当前路径执行make命令。得到模块文件。
4、 加载模块:依然是在当前路径执行insmod list.ko
5、 查看模块列表:执行命令Ismod
6、 卸载模块:执行命令rmmod list
7、
您可能关注的文档
最近下载
- Python数据分析及应用 课件 第3、4章 程序的控制结构、函数.pptx
- 2025村道生命防护工程施工组织设计.docx
- 中考现代文阅读——邓宗良《母亲的叶搭饼》.docx VIP
- 我国隧道盾构掘进机技术的发展现状.doc VIP
- DBJ50_T-460-2023 住房和城乡建设领域数字化企业评价标准(OCR).pdf VIP
- 食材采购配送服务以及售后服务方案.pdf VIP
- 2025年国考行测真题及答案解析(省级与地市级合卷) .pdf VIP
- 社会工作叙事治疗理论.pptx VIP
- 血气分析(一看就懂)ppt课件.pptx VIP
- 中国建筑业企业数字化研究报告(2024).pdf VIP
文档评论(0)