通信工程tcp(2)期末复习(2)

2019-08-02 00:05

#include #include #include #include #include MODULE_LICENSE(\MODULE_AUTHOR(\MODULE_DESCRIPTION(\MODULE_ALIAS(\ //以上为内核模块的的头文件和模式固定的部分

struct student {

char name[100]; int num;

struct list_head list; };

//以上是定义包含有的struct list_head 结构的数据结构

struct student *pstudent;//定义一个结构数组,用来存放数据,注意这里pstudent是数组指针,数组的大小由后面的kmalloc来分配!

struct student *tmp_student;//遍历时临时用来存放指向pstudent[i]的指针 struct list_head student_list;//定义链表头(是一个节点)

struct list_head *pos;//指向头结点的一个指针,会在list_for_each中说明

int mylist_init(void) {

int i = 0;

INIT_LIST_HEAD(&student_list);//初始化链表头,注意参数是一个指针,用了&符号 pstudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL);//为结构体数组分配空间,共有5个数组成员

memset(pstudent,0,sizeof(struct student)*5);//初始化结构体数组 for(i=0;i<5;i++)//建立链表 {

sprintf(pstudent[i].name,\初始化并显示学生姓名 pstudent[i].num = i+1; //初始化学生号码

list_add( &(pstudent[i].list), &student_list);//将pstudent[i].list节点插入到student_list链表中,注意这里是从头结点处插入的,最后顺序为 5、4、3、2、1 }

list_for_each(pos,&student_list)//遍历链表,此函数指明pos是一个指向节点头的指针,前面已经定义了它的类型。遍历函数相当于一个for循环,{ }内为循环操作,没循环一次pos=&student_list+1! {

tmp_student = list_entry(pos,struct student,list);//list_entry(提取数据结构)指针pos指向结构体struct student中的成员list,返回值为指向list所在的结构体的指针(起始地址) printk(\}//输出此结构体(结构数组其中的一个成员)的数据信息 return 0; }

void mylist_exit(void)//删除节点 { int i ;

for(i=0;i<5;i++) {

list_del(&(pstudent[i].list) ); }

kfree(pstudent);//释放分配的内存 }

module_init(mylist_init);//内核模块模式固定的部分 module_exit(mylist_exit);//内核模块模式固定的部分

三、Linux内核通用哈希链表

1、内核通用哈希链表的定义 2、怎样创建哈希链表 3、怎样向哈希链表添加节点 4、怎样查找哈希链表 5、怎样删除哈希链表节点

6、怎样全部输出哈希链表的所有节点

1、内核通用哈希链表的定义 struct hlist_head

{ struct hlist_node *first; };

struct hlist_node

{ struct hlist_node *next, **pprev; };

2、怎样创建哈希链表

创建具有16个元素的哈希链表的方法如下:struct hlist_head user_hash[16]; 3、怎样给哈希链表添加节点

(1)在指定的哈希链表头h所指向的链表头插入新节点

// @n:要添加的新哈希链表节点 // @h:在此哈希链表头节点后添加 hlist_add_head(struct hlist_node *n, struct hlist_head *h);

4、怎样查找哈希链表

(2)根据当前哈希链表节点指针ptr获得哈希链表宿主节点指针

// @ptr:struct hlist_node类型的指针 // @type:哈希链表节点所在的宿主节点的类型 // @member:嵌入宿主的哈希链表节点的变量名 hlist_entry(ptr, type, member); 5、怎样删除哈希链表节点

(3)从链表中删除一个指定节点// @entry:要从链表中删除的节点 hlist_del(struct hlist_head *entry); 6、怎样全部输出哈希链表的所有节点

(4)遍历哈希链表中某个key值所对应的链表

// @tpos:哈希链表宿主节点指针 // @pos:哈希链表节点指针 // @head:哈希链表中某key所对应的链表的头指针 // @member:嵌在哈希链表宿主节点中的哈希链表节点的变量名 hlist_for_each_entry(tpos, pos, head, member);

四、IP协议首部C语言定义

首部各个字段的含义(参考教材P113-114)

首都长度:IP首部的长度,一般为20B.版本:IP地址的版本,目前我们使用的都是第4版,所以这种IP也经常称为IPV4.

服务类型:服务类型包括一个3bit的优先权字段(现已被忽略),4bitTOS字段和1位未用位但必须置为0。4位的TOS分别代表最小延迟、最大吞吐量、最高可靠性和最小费用。对于TOS值,不同应用有不同的最佳值。具体值可参考RFC1394文档:http://www.rfc-editor.org/pdfrfc/rfc1349.txt.pdf

总长度:数据包的总长度。该字段是IP首部的必要内容,因为链路层需要填充一些数据以达到最小长度。(PS:以太网的最小帧长为46B).

标识符:唯一标识主机发送的每一份数据报。

标志:分为3个字段,依次为保留位、不分片位和更多片位。 ● 保留位:一般被置为0;


通信工程tcp(2)期末复习(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:齿轮习题2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: