实验报告
课程名称: TCP/IP 协议栈分析与实现
学生姓名: 郭勇专业: 信息工程
学号: 201005010718 同组学生姓名:无
实验地点:6C601 指导老师: 刘飚
实验日期: 2013年3月25日
实验一:
实验项目名称: Linux 内核通用链表的使用
一、
实验目的和要求:
学习 Linux 内核的通用链表的设计原理,熟练掌握 Linux 内核通用链表的使用。
二、
实验内容
1. 掌握 Linux 通用链表的创建
2. 掌握通用链表增加元素、删除元素和遍历链表的方法。
三、
实验要求
1. 待创建的链表头变量名为 user_queue。
2. 作为链表的宿主节点类型定义如下:
struct user {
int id;/* user id */
struct list_head list;
}
3.
针对上述 user_queue 链表,
要求以队列方式向其中依次添加 10 个类型为 struct user
的宿主节点,并要求这 10 个宿主节点的 id 依次为 1-10
4. 依次遍历输出这 10 个宿主节点的 id
5. 从队列中删除首个宿主节点,然后依次遍历该队列并输出余下各宿主节点的 id 值
四、
实现原理
Linux 的内核源文件 提供了所有的链表定义、各类操作接口及其实现。其中
创建链表的方法如下:
LIST_HEAD(my_list);
内核源文件 中定义了以下若干接口,用于对通用链表进行各类操作:
1)
在指定的 head 后插入新节点,常用于堆栈数据结构的实现
// ***@new: 即将添加的新链表节点
// ***@head: 在此节点后添加
list_add(struct list_head *new, struct list_head *head);
2)
在指定的 head 前插入新节点,常用于队列数据结构的实现
// ***@new: 即将添加的新链表节点
// ***@head: 在此节点前添加
list_add_tail(struct list_head *new, struct list_head *head)
3)
从链表中删除一个指定节点
// ***@entry: 要从链表中删除的链表节点
list_del(struct list_head *entry)
4)
根据当前链表节点指针 ptr 获得宿主节点指针
// * ***@ptr:
struct list_head 类型的指针
// * ***@type: 链表节点所在的宿主节点的类型
// * ***@member: 嵌入宿主的链表节点的变量名
list_entry(ptr, type, member)
5)
遍历链表
// ***@pos: 遍历链表时用于指示正在遍历的链表节点的指针
// ***@head: 链表头
list_for_each(pos, head)
五、
实现代码和运行结果
#include<>
#include<>
#include ""
LIST_HEAD(user_quene);
struct user{
int id;/*user id*/
stru
TCP IP 协议栈分析及实现 来自淘豆网m.daumloan.com转载请标明出处.