資源描述:
《TCP IP 協(xié)議棧分析與實現(xiàn).docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應用文檔-天天文庫。
1、實驗報告課程名稱:TCP/IP協(xié)議棧分析與實現(xiàn)學生姓名:郭勇專業(yè):信息工程學號:8同組學生姓名:無實驗地點:6C601指導老師:劉飚實驗日期:2013年3月25日實驗一:實驗項目名稱:Linux內(nèi)核通用鏈表的使用一、實驗目的和要求:學習Linux內(nèi)核的通用鏈表的設計原理,熟練掌握Linux內(nèi)核通用鏈表的使用。二、實驗內(nèi)容1.掌握Linux通用鏈表的創(chuàng)建2.掌握通用鏈表增加元素、刪除元素和遍歷鏈表的方法。三、實驗要求1.待創(chuàng)建的鏈表頭變量名為user_queue。2.作為鏈表的宿主節(jié)點類型定義如下:structuser{intid;/*userid*/structlist_headli
2、st;}3.針對上述user_queue鏈表,要求以隊列方式向其中依次添加10個類型為structuser的宿主節(jié)點,并要求這10個宿主節(jié)點的id依次為1-104.依次遍歷輸出這10個宿主節(jié)點的id5.從隊列中刪除首個宿主節(jié)點,然后依次遍歷該隊列并輸出余下各宿主節(jié)點的id值四、實現(xiàn)原理Linux的內(nèi)核源文件list.h提供了所有的鏈表定義、各類操作接口及其實現(xiàn)。其中創(chuàng)建鏈表的方法如下:LIST_HEAD(my_list);內(nèi)核源文件list.h中定義了以下若干接口,用于對通用鏈表進行各類操作:1)在指定的head后插入新節(jié)點,常用于堆棧數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)//@new:即將添加的新鏈表節(jié)點
3、//@head:在此節(jié)點后添加list_add(structlist_head*new,structlist_head*head);2)在指定的head前插入新節(jié)點,常用于隊列數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)//@new:即將添加的新鏈表節(jié)點//@head:在此節(jié)點前添加list_add_tail(structlist_head*new,structlist_head*head)3)從鏈表中刪除一個指定節(jié)點//@entry:要從鏈表中刪除的鏈表節(jié)點list_del(structlist_head*entry)4)根據(jù)當前鏈表節(jié)點指針ptr獲得宿主節(jié)點指針//*@ptr:structlist_head類
4、型的指針//*@type:鏈表節(jié)點所在的宿主節(jié)點的類型//*@member:嵌入宿主的鏈表節(jié)點的變量名list_entry(ptr,type,member)5)遍歷鏈表//@pos:遍歷鏈表時用于指示正在遍歷的鏈表節(jié)點的指針//@head:鏈表頭list_for_each(pos,head)五、實現(xiàn)代碼和運行結(jié)果#include#include#include"list.h"LIST_HEAD(user_quene);structuser{intid;/*userid*/structlist_headlist;};intmain(){struct
5、useruid[10];structlist_head*pos;inti;for(i=0;i<10;i++){list_add_tail(&(uid[i].list),&user_quene);uid[i].id=i+1;}list_for_each(pos,&user_quene)printf("%d",list_entry(pos,structuser,list)->id);printf("");list_del(&(uid[0].list));list_for_each(pos,&user_quene)printf("%d",list_entry(pos,structuse
6、r,list)->id);printf("");return0;}實驗二、實驗項目名稱:Linux內(nèi)核通用哈希鏈表的使用一、實驗目的和要求:學習Linux內(nèi)核的通用哈希鏈表的設計原理,熟練掌握Linux內(nèi)核通用哈希鏈表的使用。二、實驗內(nèi)容1.掌握Linux通用哈希鏈表的創(chuàng)建2.掌握通用哈希表增加元素、查找元素的方法。三、1.實驗要求待創(chuàng)建的哈希表頭數(shù)組為structhlist_headuser_hash[16],要求對哈希表宿主元素的name成員的值進行散列,并將散列值作為哈希表宿主元素的key。2.作為哈希表元素的宿主節(jié)點類型定義如下:structusermap{structh
7、list_nodehlist;unsignedcharname[8];};3.針對上述user_hash哈希表,要求向其中添加3個類型為structusermap的宿主元素,并要求這3個宿主元素的name成員分別為"smith","john","bob"。4.向哈希表user_hash中添加第4個宿主元素。若新宿主元素的name成員已經(jīng)存在(例如"john"),則提示已經(jīng)存在該用戶,否則向哈希表中添加該宿主元素。四、實現(xiàn)原理Linux的內(nèi)核源文件list.