- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux操作系统-链表的应用
新乡学院计算机与信息工程学院
实 验 报 告
课程名称 操作系统原理 计算机科学与技术3班2013052701xx
姓 名 xxx
实验成绩
任课教师 xxx
2013年 12月 3日
实验名称 链表的应用A14-322 实验时间 2013年12月 3日 实验目的与要求
实验目的:进一步熟悉linux中链表的应用
实验要求:认真
1、编写list.c文件代码,代码如下:#include linux/kernel.h
#include linux/module.h
#include linux/slab.h
#include linux/list.h
MODULE_LICENSE(GPL);
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;
int i;
printk(doublelist is starting...\n);
INIT_LIST_HEAD(numhead.list);
//建立N个节点,依次加入到链表当中
for (i = 0; i N; i++) {
listnode = (struct numlist *)kmalloc(sizeof(struct numlist), GFP_KERNEL); // kmalloc()在内核空间申请内存,类似于malloc,参见第四章
listnode-num = i + 1;
list_add_tail(listnode-list, numhead.list);
printk(Node %d has added to the doublelist...\n, i + 1);
}
//遍历链表
i = 1;
list_for_each(pos, numhead.list) {
p = list_entry(pos, struct numlist, list);
printk(Node %ds data:%d\n, i, p-num);
i++;
}
return 0;
}
static void __exit doublelist_exit(void)
{
struct list_head *pos, *n;
struct numlist *p;
int i;
//依次删除N个节点
i = 1;
list_for_each_safe(pos, n, numhead.list) { //为了安全删除节点而进行的遍历
list_del(pos); //从双链表中删除当前节点
p = list_entry(pos, struct numlist, list); //得到当前数据节点的首地址,即指针
kfree(p); //释放该数据节点所占空间
printk(Node %d has removed from the doublelist...\n, i++);
}
printk(doublelist is exiting..\n);
}
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、行编译:在lis
您可能关注的文档
- 137血透室医院感染管理制度.doc
- 16-附录Windows 2000 的一些基本概念.doc
- 1208066014甘东阳DNS和HTTP协议分析.doc
- 18流式细胞术检测细胞内细胞因子方法的建立.doc
- 18工程材料与成形工艺概念定义原理规律小结.doc
- 1986年中医资料1通阳助阳法治疗乙型肝炎初探.doc
- 1Auint3教案.doc
- 1HTTP协议分析.doc
- 子宫颈鳞状细胞癌的癌前病变诊断和鉴别诊断.doc
- 1红花的现代研究进展-王铁锤(论文格式示范).doc
- 水生态保护与土地利用变化的互动关系.docx
- 2025年乡村民宿数字化营销效果与旅游目的地可持续发展报告.docx
- 高校教师资格证之《高等教育心理学》试题(得分题)带答案详解(培优).docx
- 2025年游戏行业虚拟商品设计与用户体验优化策略报告.docx
- 高校教师资格证之《高等教育心理学》试题(得分题)带答案详解(培优b卷).docx
- 高校教师资格证之《高等教育心理学》试题(得分题)带答案详解.docx
- 智能安防系统市场调研及发展报告.docx
- 高校教师资格证之《高等教育心理学》试题(得分题)带答案详解(研优卷).docx
- 智能硬件企业生态构建案例解析:产业协同与竞争策略.docx
- 高校教师资格证之《高等教育心理学》试题(得分题)完整答案详解.docx
文档评论(0)