




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)報(bào)告課程名稱:TCP/IP 協(xié)議棧分析與實(shí)現(xiàn)學(xué)生姓名:郭勇 專業(yè):信息工程學(xué)號(hào):201005010718 同組學(xué)生姓名:無(wú)實(shí)驗(yàn)地點(diǎn) :6C601 指導(dǎo)老師: 劉飚實(shí)驗(yàn)日期: 2013年3月25日實(shí)驗(yàn)一:實(shí)驗(yàn)項(xiàng)目名稱:Linux 內(nèi)核通用鏈表的使用一、實(shí)驗(yàn)?zāi)康暮鸵?學(xué)習(xí) Linux 內(nèi)核的通用鏈表的設(shè)計(jì)原理,熟練掌握 Linux 內(nèi)核通用鏈表的使用。二、實(shí)驗(yàn)內(nèi)容1. 掌握 Linux 通用鏈表的創(chuàng)建2. 掌握通用鏈表增加元素、刪除元素和遍歷鏈表的方法。三、實(shí)驗(yàn)要求1. 待創(chuàng)建的鏈表頭變量名為 user_queue。2. 作為鏈表的宿主節(jié)點(diǎn)類型定義如下:struct user int id;
2、/* user id */struct list_head list;3.針對(duì)上述 user_queue 鏈表,要求以隊(duì)列方式向其中依次添加 10 個(gè)類型為 struct user的宿主節(jié)點(diǎn),并要求這 10 個(gè)宿主節(jié)點(diǎn)的 id 依次為 1-104. 依次遍歷輸出這 10 個(gè)宿主節(jié)點(diǎn)的 id5. 從隊(duì)列中刪除首個(gè)宿主節(jié)點(diǎn),然后依次遍歷該隊(duì)列并輸出余下各宿主節(jié)點(diǎn)的 id 值四、實(shí)現(xiàn)原理Linux 的內(nèi)核源文件 list.h 提供了所有的鏈表定義、各類操作接口及其實(shí)現(xiàn)。其中創(chuàng)建鏈表的方法如下:LIST_HEAD(my_list);內(nèi)核源文件 list.h 中定義了以下若干接口,用于對(duì)通用鏈表進(jìn)行各類
3、操作:1)在指定的 head 后插入新節(jié)點(diǎn),常用于堆棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)/ new: 即將添加的新鏈表節(jié)點(diǎn)/ head: 在此節(jié)點(diǎn)后添加list_add(struct list_head *new, struct list_head *head);2)在指定的 head 前插入新節(jié)點(diǎn),常用于隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)/ new: 即將添加的新鏈表節(jié)點(diǎn)/ head: 在此節(jié)點(diǎn)前添加list_add_tail(struct list_head *new, struct list_head *head)3)從鏈表中刪除一個(gè)指定節(jié)點(diǎn)/ entry: 要從鏈表中刪除的鏈表節(jié)點(diǎn)list_del(struct list
4、_head *entry)4)根據(jù)當(dāng)前鏈表節(jié)點(diǎn)指針 ptr 獲得宿主節(jié)點(diǎn)指針/ * ptr:struct list_head 類型的指針/ * type: 鏈表節(jié)點(diǎn)所在的宿主節(jié)點(diǎn)的類型/ * member: 嵌入宿主的鏈表節(jié)點(diǎn)的變量名list_entry(ptr, type, member)5)遍歷鏈表/ pos: 遍歷鏈表時(shí)用于指示正在遍歷的鏈表節(jié)點(diǎn)的指針/ head: 鏈表頭list_for_each(pos, head)五、實(shí)現(xiàn)代碼和運(yùn)行結(jié)果#include#include#include list.hLIST_HEAD(user_quene);struct userint id;/*u
5、ser id*/struct list_head list;int main()struct user uid10;struct list_head *pos;int i;for(i=0;iid);printf(n);list_del(&(uid0.list);list_for_each(pos,&user_quene)printf(%d ,list_entry(pos,struct user,list)-id);printf(n);return 0;實(shí)驗(yàn)二、實(shí)驗(yàn)項(xiàng)目名稱:Linux 內(nèi)核通用哈希鏈表的使用一、實(shí)驗(yàn)?zāi)康暮鸵?學(xué)習(xí) Linux 內(nèi)核的通用哈希鏈表的設(shè)計(jì)原理,熟練掌握 Linux
6、 內(nèi)核通用哈希鏈表的使用。二、實(shí)驗(yàn)內(nèi)容1. 掌握 Linux 通用哈希鏈表的創(chuàng)建2. 掌握通用哈希表增加元素、查找元素的方法。三、1.實(shí)驗(yàn)要求待創(chuàng)建的哈希表頭數(shù)組為 struct hlist_head user_hash16,要求對(duì)哈希表宿主元素的name 成員的值進(jìn)行散列,并將散列值作為哈希表宿主元素的 key。2.作為哈希表元素的宿主節(jié)點(diǎn)類型定義如下:struct usermap struct hlist_node hlist;unsigned char name8;3.針對(duì)上述 user_hash 哈希表,要求向其中添加 3 個(gè)類型為 struct usermap 的宿主元素,并要求這
7、3 個(gè)宿主元素的 name 成員分別為smith, john, bob。4.向哈希表 user_hash 中添加第 4 個(gè)宿主元素。若新宿主元素的 name 成員已經(jīng)存在(例如john),則提示已經(jīng)存在該用戶,否則向哈希表中添加該宿主元素。四、實(shí)現(xiàn)原理Linux 的內(nèi)核源文件 list.h 提供了哈希表各類操作接口及其實(shí)現(xiàn)。其中創(chuàng)建具有 16個(gè) key 值的哈希表的方法如下:struct hlist_head user_hash16;在上述 user_hash 數(shù)組的 16 個(gè)元素中存放的哈希表頭元素定義如下:struct hlist_head struct hlist_node *first
8、;哈希表節(jié)點(diǎn)元素定義如下:struct hlist_node struct hlist_node *next, *pprev;本實(shí)驗(yàn)對(duì)哈希表宿主元素節(jié)點(diǎn)的 name 值進(jìn)行散列的算法如下:unsigned int BKDRHash(unsigned char *str)unsigned int seed = 131;unsigned int hash = 0;while(*str)hash = hash * seed + (*str+);return (hash & 0x7FFFFFFF);/ 返回此*str 所對(duì)應(yīng)的哈希值于是,本實(shí)驗(yàn)中對(duì)一個(gè)字符串 name 求最終哈希值 hash 的方法如
9、下:unsigned int hash = BKDRHash(name) & 15內(nèi)核源文件 list.h 中定義了以下若干接口,用于對(duì)哈希表進(jìn)行各類操作:1)在指定的哈希表頭 h 所指向的鏈表頭插入新節(jié)點(diǎn)/ n: 要添加的新哈希表節(jié)點(diǎn)/ h: 在此哈希表頭節(jié)點(diǎn)后添加hlist_add_head(struct hlist_node *n, struct hlist_head *h);2)根據(jù)當(dāng)前哈希表節(jié)點(diǎn)指針 ptr 獲得哈希表宿主節(jié)點(diǎn)指針/ * ptr:struct hlist_node 類型的指針/ * type: 哈希表節(jié)點(diǎn)所在的宿主節(jié)點(diǎn)的類型/ * member: 嵌入宿主的哈希表節(jié)點(diǎn)
10、的變量名hlist_entry(ptr, type, member)3)遍歷哈希表中某個(gè) key 所對(duì)應(yīng)的鏈表/ tpos: 哈希表宿主節(jié)點(diǎn)指針/ pos: 哈希表節(jié)點(diǎn)指針/ head: 哈希表中某 key 所對(duì)應(yīng)的鏈表的頭指針/ member: 嵌在哈希表宿主節(jié)點(diǎn)中哈希表節(jié)點(diǎn)的變量名hlist_for_each_entry(tpos, pos, head, member)五、實(shí)現(xiàn)代碼和運(yùn)行結(jié)果#include#include#include#include list.hstruct hlist_head user_hash16;struct usermap struct hlist_node
11、 hlist;unsigned char name8;unsigned int BKDRHash(unsigned char *str)unsigned int seed = 131;unsigned int hash = 0;while(*str)hash = hash * seed + (*str+);return (hash & 0x7FFFFFFF);/ 返回此*str 所對(duì)應(yīng)的哈希值int main()struct usermap u_name16,*tpos;struct hlist_node *pos;unsigned int hash;unsigned char name8,
12、*sname;int flag=0;strncpy(u_,bob,8); hash = BKDRHash(u_) & 15;hlist_add_head(&(u_name0.hlist), &(user_hashhash);/printf(%s %un,u_,hash);hlist_for_each_entry(tpos,pos,&(user_hashhash),hlist)printf(%s,hlist_entry(pos, struct usermap, hlist)-name);printf(n);strncpy(u_name1
13、.name,smith,8);hash = BKDRHash(u_) & 15;hlist_add_head(&(u_name1.hlist), &(user_hashhash); /printf(%s %un,u_,hash);hlist_for_each_entry(tpos,pos,&(user_hashhash),hlist)printf(%s,hlist_entry(pos, struct usermap, hlist)-name);printf(n);strncpy(u_,john,8);hash = BKDRHash(u
14、_) & 15;hlist_add_head(&(u_name2.hlist), &(user_hashhash);/printf(%s %un,u_,hash);hlist_for_each_entry(tpos,pos,&(user_hashhash),hlist)printf(%s,hlist_entry(pos, struct usermap, hlist)-name);printf(n);printf(please input namen);scanf(%s,name);hash = BKDRHash(name) & 15;/printf(%dn,hash);hlist_for_each_entry(tpos,pos,&(user_hashhash),hlist)if(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 婚前簽婚后財(cái)產(chǎn)協(xié)議書
- 土石方運(yùn)輸合同協(xié)議書
- 調(diào)換鋪面協(xié)議書
- 父親和親戚買房協(xié)議書
- 校園暴力和欺凌協(xié)議書
- 老公保證協(xié)議書
- 苗木成活協(xié)議書
- 職能授權(quán)協(xié)議書
- 美加談判協(xié)議書
- 炸雞店入股合同協(xié)議書
- GB/T 28728-2012溶液聚合苯乙烯-丁二烯橡膠(SSBR)微觀結(jié)構(gòu)的測(cè)定
- GB/T 12359-1990梯形螺紋極限尺寸
- 領(lǐng)退轉(zhuǎn)款賬戶確認(rèn)書
- 精益生產(chǎn)精管理培訓(xùn)課件
- 監(jiān)理大綱(綜合)
- 第6章職業(yè)腫瘤和職業(yè)性傳染病課件
- 陜西省漢中市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- FIDIC銀皮書(中英文對(duì)照)
- 癲癇護(hù)理查房.ppt課件
- 軍事地形學(xué)地形圖基本知識(shí)
- 固體火箭發(fā)動(dòng)機(jī)制造工藝
評(píng)論
0/150
提交評(píng)論