版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗報告課程名稱:TCP/IP 協(xié)議棧分析與實現(xiàn)學(xué)生姓名:郭勇 專業(yè):信息工程學(xué)號:201005010718 同組學(xué)生姓名:無實驗地點 :6C601 指導(dǎo)老師: 劉飚實驗日期: 2013年3月25日實驗一:實驗項目名稱:Linux 內(nèi)核通用鏈表的使用一、實驗?zāi)康暮鸵?學(xué)習(xí) Linux 內(nèi)核的通用鏈表的設(shè)計原理,熟練掌握 Linux 內(nèi)核通用鏈表的使用。二、實驗內(nèi)容1. 掌握 Linux 通用鏈表的創(chuàng)建2. 掌握通用鏈表增加元素、刪除元素和遍歷鏈表的方法。三、實驗要求1. 待創(chuàng)建的鏈表頭變量名為 user_queue。2. 作為鏈表的宿主節(jié)點類型定義如下:struct user int id;
2、/* user id */struct list_head list;3.針對上述 user_queue 鏈表,要求以隊列方式向其中依次添加 10 個類型為 struct user的宿主節(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 中定義了以下若干接口,用于對通用鏈表進(jìn)行各類
3、操作:1)在指定的 head 后插入新節(jié)點,常用于堆棧數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)/ new: 即將添加的新鏈表節(jié)點/ head: 在此節(jié)點后添加list_add(struct list_head *new, struct list_head *head);2)在指定的 head 前插入新節(jié)點,常用于隊列數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)/ new: 即將添加的新鏈表節(jié)點/ head: 在此節(jié)點前添加list_add_tail(struct list_head *new, struct list_head *head)3)從鏈表中刪除一個指定節(jié)點/ entry: 要從鏈表中刪除的鏈表節(jié)點list_del(struct list
4、_head *entry)4)根據(jù)當(dāng)前鏈表節(jié)點指針 ptr 獲得宿主節(jié)點指針/ * ptr:struct list_head 類型的指針/ * 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.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;實驗二、實驗項目名稱:Linux 內(nèi)核通用哈希鏈表的使用一、實驗?zāi)康暮鸵?學(xué)習(xí) Linux 內(nèi)核的通用哈希鏈表的設(shè)計原理,熟練掌握 Linux
6、 內(nèi)核通用哈希鏈表的使用。二、實驗內(nèi)容1. 掌握 Linux 通用哈希鏈表的創(chuàng)建2. 掌握通用哈希表增加元素、查找元素的方法。三、1.實驗要求待創(chuàng)建的哈希表頭數(shù)組為 struct hlist_head user_hash16,要求對哈希表宿主元素的name 成員的值進(jìn)行散列,并將散列值作為哈希表宿主元素的 key。2.作為哈希表元素的宿主節(jié)點類型定義如下:struct usermap struct hlist_node hlist;unsigned char name8;3.針對上述 user_hash 哈希表,要求向其中添加 3 個類型為 struct usermap 的宿主元素,并要求這
7、3 個宿主元素的 name 成員分別為smith, john, bob。4.向哈希表 user_hash 中添加第 4 個宿主元素。若新宿主元素的 name 成員已經(jīng)存在(例如john),則提示已經(jīng)存在該用戶,否則向哈希表中添加該宿主元素。四、實現(xiàn)原理Linux 的內(nèi)核源文件 list.h 提供了哈希表各類操作接口及其實現(xiàn)。其中創(chuàng)建具有 16個 key 值的哈希表的方法如下:struct hlist_head user_hash16;在上述 user_hash 數(shù)組的 16 個元素中存放的哈希表頭元素定義如下:struct hlist_head struct hlist_node *first
8、;哈希表節(jié)點元素定義如下:struct hlist_node struct hlist_node *next, *pprev;本實驗對哈希表宿主元素節(jié)點的 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 所對應(yīng)的哈希值于是,本實驗中對一個字符串 name 求最終哈希值 hash 的方法如
9、下:unsigned int hash = BKDRHash(name) & 15內(nèi)核源文件 list.h 中定義了以下若干接口,用于對哈希表進(jìn)行各類操作:1)在指定的哈希表頭 h 所指向的鏈表頭插入新節(jié)點/ n: 要添加的新哈希表節(jié)點/ h: 在此哈希表頭節(jié)點后添加hlist_add_head(struct hlist_node *n, struct hlist_head *h);2)根據(jù)當(dāng)前哈希表節(jié)點指針 ptr 獲得哈希表宿主節(jié)點指針/ * ptr:struct hlist_node 類型的指針/ * type: 哈希表節(jié)點所在的宿主節(jié)點的類型/ * member: 嵌入宿主的哈希表節(jié)點
10、的變量名hlist_entry(ptr, type, member)3)遍歷哈希表中某個 key 所對應(yīng)的鏈表/ tpos: 哈希表宿主節(jié)點指針/ pos: 哈希表節(jié)點指針/ head: 哈希表中某 key 所對應(yīng)的鏈表的頭指針/ member: 嵌在哈希表宿主節(jié)點中哈希表節(jié)點的變量名hlist_for_each_entry(tpos, pos, head, member)五、實現(xià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 所對應(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國內(nèi)壓式氣墊橡皮布數(shù)據(jù)監(jiān)測研究報告
- 2025年硝石灰項目可行性研究報告
- 2025年中國財務(wù)管理系統(tǒng)軟件市場調(diào)查研究報告
- 2025年醫(yī)用床頭柜項目可行性研究報告
- 2025年一卡通ID卡項目可行性研究報告
- 2025至2030年老人電動三輪車項目投資價值分析報告
- 2025年中國壁掛型伺服交流穩(wěn)壓器市場調(diào)查研究報告
- 2025年中國寫真機(jī)噴頭市場調(diào)查研究報告
- 五年級數(shù)學(xué)(小數(shù)乘除法)計算題專項練習(xí)及答案匯編
- 化工產(chǎn)品研發(fā)服務(wù)合同
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對象登記表(樣表)
- 主管部門審核意見三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對幼兒社會性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級上冊第八單元《分?jǐn)?shù)的初步認(rèn)識》教材解讀
- (人教版2019)數(shù)學(xué)必修第一冊 第三章 函數(shù)的概念與性質(zhì) 復(fù)習(xí)課件
- 重慶市銅梁區(qū)2024屆數(shù)學(xué)八上期末檢測試題含解析
評論
0/150
提交評論