成都理工大学TCPIP实验报告.docx
《成都理工大学TCPIP实验报告.docx》由会员分享,可在线阅读,更多相关《成都理工大学TCPIP实验报告.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本科生实验报告实验课程 计算机网络与TCP/IP协议体系(2) 学院名称 信息科学与技术学院 专业名称 通信工程 学生姓名 杜立华 学生学号 2 指导教师 刘飚 实验地点 6B603 实验成绩 二 一五 年 二 月 二 一五 年 六 月实验一 Linux内核通用链表的使用 实验目的学习Linux内核通用链表的设计原理,熟练掌握Linux内核通用链表的使用。实验内容1、掌握Linux通用链表的创建2、掌握通用链表添加元素、删除元素和遍历链表的方法3、掌握通用链表的查找方法实验要求 待创建的链表头变量名为user_queue。 作为链表的宿主节点类型定义如下: struct user int id
2、; /* user id */ struct list_head list; ; 针对上述user_queue链表,要求以队列方式向其中依次添加10个类型为struct user的宿主节点,并要求这10个宿主节点的id依次为110 依次遍历输出这10个宿主节点的id 从链表中删除首个宿主节点,然后依次遍历该队列并输出余下各宿主节点的id 在struct user结构体中增加一个username字段,用于存储该用户名字,重新以队列方式向其中依次添加10个类型为struct user的宿主节点,并要求这10个宿主节点的id依次为110 在链表中搜索id值为5的节点,并输出该节点username值实
3、现原理Linux的内核源文件list.h提供了所有的链表定义,以及各类链表的操作接口和实现。其中创建链表的方法如下:LIST_HEAD(my_list); 源文件list.h中定义了如下若干接口,用于对通用链表进行各种操作: 在指定的head后插入新节点,常用于堆栈数据结构的实现/ newsk:即将添加的新链表节点/ head:在此节点后添加list_add(struct list_head *new, struct list_head *head); 在指定的head前插入新节点,常用于队列数据结构的实现/ newsk:即将添加的新链表节点/ head:在此节点前添加list_add_tai
4、l(struct list_head *new, struct list_head *head); 从链表中删除一个指定节点/ entry:要从链表中删除的节点list_del(struct list_head *entry); 根据当前链表节点指针ptr获得宿主节点指针/ ptr:struct list_head类型的指针/ type:链表节点所在的宿主节点的类型/ member:嵌入宿主的链表节点的变量名list_entry(ptr, type, member); 遍历链表/ pos:遍历链表时用于指示正在遍历的链表节点的指针/ head:链表头list_for_each(pos, hea
5、d); 实现代码和运行结果请打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后。#include #include #include list.hstruct user int id; struct list_head list;int main(void) struct user *p; LIST_HEAD(user_queue); for (int i = 0; i id = i; list_add_tail(&p-list, &user_queue); struct list_head *q; list_for_each(q, &user_queue) p = list_en
6、try(q, struct user, list); printf(%dn, p-id); return 0;#include #include #include list.hstruct user char username20; int id; struct list_head list;int main(void) struct user *p; LIST_HEAD(head); for (int i; i id = i + 1; printf(user %2d, Please input username: , i+1); scanf(%s, p-username); list_add
7、_tail(&(p-list), &head); struct list_head *tmp; list_for_each(tmp, &head) p = list_entry(tmp, struct user, list); printf(%dt%sn, p-id, p-username); list_for_each(tmp, &head) p = list_entry(tmp, struct user, list); if (p-id = 5) printf(%sn, p-username); return 0;实验二 Linux内核通用哈希链表的使用 实验目的学习Linux内核通用哈希
8、链表的设计原理,熟练掌握Linux内核通用哈希链表的使用。实验内容1、掌握Linux通用哈希链表的创建。2、掌握通用哈希链表添加元素、查找元素的方法。实验要求1、 待创建的哈希链表头数组为struct hlist_head user_hash16,要求对该哈希链表宿主节点的name成员值进行散列,并将散列值与15进行与运算作为哈希链表宿主元素的哈希值。2、 对该哈希表的所有表头元素进行初始化,初始化操作如下,其中index的变化范围为015。 INIT_HLIST_HEAD (&user_hashindex);3、 作为哈希链表元素的的宿主节点类型定义如下: struct usermap st
9、ruct hlist_node hlist; unsigned char name8; ;4、 针对上述user_hash哈希链表,要求向其中添加3个类型为struct usermap的宿主节点,并要求这3个宿主节点的name成员分别为”smith”, ”john”, ”bob”, 如下图所示:struct usermapstruct hlist_head user_hash16struct hlist_node0.12.struct usermap155、 向哈希表user_hash中添加2个新宿主元素, 其中一个宿主元素的name成员为”john”,另外一个宿主元素的name成员为”lis
10、a”。要求若新宿主元素的name成员已经存在,则提示已经存在该用户,不再向哈希链表中加入该已经存在的宿主节点,否则向哈希链表中添加该新宿主元素。6、 遍历整个哈希表,输出所有表中已存在的宿主节点元素的name。实现原理Linux的内核源文件list.h提供了哈希链表的各种操作接口和实现。其中创建具有16个元素的哈希链表的方法如下:struct hlist_head user_hash16; 在上述user_hash数组的16个元素中存放的哈希表头元素定义如下:struct hlist_head struct hlist_node *first;哈希链表节点元素定义如下:struct hlist
11、_node struct hlist_node *next, *pprev;本实验对哈希链表宿主节点的name值进行散列的算法如下:unsigned int BKDRHash(unsigned char *str);unsigned int seed = 131;unsigned int hash = 0;while(*str) hash = hash * seed + (*str+); return (hash & 0x7FFFFFFF);于是,本实验对一个字符串name求最终哈希值hash的方法如下: unsigned int hash = BKDRHash(name) & 15; 内核源
12、文件list.h定义了以下若干接口,用于对哈希链表进行各种操作:(1) 在指定的哈希链表头h所指向的链表头插入新节点/ n:要添加的新哈希链表节点/ h:在此哈希链表头节点后添加hlist_add_head(struct hlist_node *n, struct hlist_head *h); (2) 根据当前哈希链表节点指针ptr获得好像链表宿主节点指针/ ptr:struct hlist_node类型的指针/ type:哈希链表节点所在的宿主节点的类型/ member:嵌入宿主的哈希链表节点的变量名hlist_entry(ptr, type, member); (3) 遍历哈希链表中某个
13、key值所对应的链表/ tpos:哈希链表宿主节点指针/ pos:哈希链表节点指针/ head:哈希链表中某key所对应的链表的头指针/ member:嵌在哈希链表宿主节点中的哈希链表节点的变量名hlist_for_each_entry(tpos, pos, head, member); 实现代码和运行结果请打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后。#include #include #include list.hstruct usermap struct hlist_node hlist; unsigned char name8;void hlist_print(str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成都 理工大学 TCPIP 实验 报告
限制150内