资源描述:
《成都理工大学tcpip实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、17本科生实验报告实验课程计算机网络与TCP/IP协议体系(2)学院名称信息科学与技术学院专业名称通信工程学生姓名杜立华学生学号201313070112指导教师刘飚实验地点6B603实验成绩二〇一五年二月——二〇一五年六月17实验一Linux内核通用链表的使用实验目的学习Linux内核通用链表的设计原理,熟练掌握Linux内核通用链表的使用。实验内容1、掌握Linux通用链表的创建2、掌握通用链表添加元素、删除元素和遍历链表的方法3、掌握通用链表的查找方法实验要求·待创建的链表头变量名为user_queue。·作为链表的宿主节点类型定义如
2、下:structuser{intid;/*userid*/structlist_headlist;};·针对上述user_queue链表,要求以队列方式向其中依次添加10个类型为structuser的宿主节点,并要求这10个宿主节点的id依次为1—10·依次遍历输出这10个宿主节点的id·从链表中删除首个宿主节点,然后依次遍历该队列并输出余下各宿主节点的id·在structuser结构体中增加一个username字段,用于存储该用户名字,重新以队列方式向其中依次添加10个类型为structuser的宿主节点,并要求这10个宿主节点的id依
3、次为1—10·在链表中搜索id值为5的节点,并输出该节点username值实现原理Linux的内核源文件list.h提供了所有的链表定义,以及各类链表的操作接口和实现。其中创17建链表的方法如下:LIST_HEAD(my_list);源文件list.h中定义了如下若干接口,用于对通用链表进行各种操作:·在指定的head后插入新节点,常用于堆栈数据结构的实现//@newsk:即将添加的新链表节点//@head:在此节点后添加list_add(structlist_head*new,structlist_head*head);·在指定的hea
4、d前插入新节点,常用于队列数据结构的实现//@newsk:即将添加的新链表节点//@head:在此节点前添加list_add_tail(structlist_head*new,structlist_head*head);·从链表中删除一个指定节点//@entry:要从链表中删除的节点list_del(structlist_head*entry);·根据当前链表节点指针ptr获得宿主节点指针//@ptr:structlist_head类型的指针//@type:链表节点所在的宿主节点的类型//@member:嵌入宿主的链表节点的变量名list
5、_entry(ptr,type,member);·遍历链表//@pos:遍历链表时用于指示正在遍历的链表节点的指针//@head:链表头list_for_each(pos,head);实现代码和运行结果请打印本实验的程序代码和程序运行截图,并作为附件附在本实验报告后。#include#include#include"list.h"structuser17{intid;structlist_headlist;};intmain(void){structuser*p;LIST_HEAD(user_queu
6、e);for(inti=0;i<10;i++){p=(structuser*)malloc(sizeof(structuser));p->id=i;list_add_tail(&p->list,&user_queue);}structlist_head*q;list_for_each(q,&user_queue){p=list_entry(q,structuser,list);printf("%d",p->id);}return0;}#include#include#include"list.h"
7、structuser{charusername[20];intid;structlist_headlist;17};intmain(void){structuser*p;LIST_HEAD(head);for(inti;i<10;i++){p=(structuser*)malloc(sizeof(structuser));p->id=i+1;printf("user%2d,Pleaseinputusername:",i+1);scanf("%s",p->username);list_add_tail(&(p->list),&head);}
8、structlist_head*tmp;list_for_each(tmp,&head){p=list_entry(tmp,structuser,list);printf("%dt%s"