




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗報告課程名稱:TCP/IP 協(xié)議棧分析與實現(xiàn)學生姓名:郭勇 專業(yè):信息工程學號:201005010718 同組學生姓名:無實驗地點 :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é)點類型定義如下: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 中定義了以下若干接口,用于對通用鏈表進行各類
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ù)當前鏈表節(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)核通用哈希鏈表的使用一、實驗目的和要求:學習 Linux 內(nèi)核的通用哈希鏈表的設計原理,熟練掌握 Linux
6、 內(nèi)核通用哈希鏈表的使用。二、實驗內(nèi)容1. 掌握 Linux 通用哈希鏈表的創(chuàng)建2. 掌握通用哈希表增加元素、查找元素的方法。三、1.實驗要求待創(chuàng)建的哈希表頭數(shù)組為 struct hlist_head user_hash16,要求對哈希表宿主元素的name 成員的值進行散列,并將散列值作為哈希表宿主元素的 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 值進行散列的算法如下:unsigned int BKDRHash(unsigned char *str)unsigned int seed = 131;unsigned int hash = 0;while(*str)hash = hash * seed + (*str+);return (hash & 0x7FFFFFFF);/ 返回此*str 所對應的哈希值于是,本實驗中對一個字符串 name 求最終哈希值 hash 的方法如
9、下:unsigned int hash = BKDRHash(name) & 15內(nèi)核源文件 list.h 中定義了以下若干接口,用于對哈希表進行各類操作:1)在指定的哈希表頭 h 所指向的鏈表頭插入新節(jié)點/ n: 要添加的新哈希表節(jié)點/ h: 在此哈希表頭節(jié)點后添加hlist_add_head(struct hlist_node *n, struct hlist_head *h);2)根據(jù)當前哈希表節(jié)點指針 ptr 獲得哈希表宿主節(jié)點指針/ * ptr:struct hlist_node 類型的指針/ * type: 哈希表節(jié)點所在的宿主節(jié)點的類型/ * member: 嵌入宿主的哈希表節(jié)點
10、的變量名hlist_entry(ptr, type, member)3)遍歷哈希表中某個 key 所對應的鏈表/ tpos: 哈希表宿主節(jié)點指針/ pos: 哈希表節(jié)點指針/ head: 哈希表中某 key 所對應的鏈表的頭指針/ 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 所對應的哈希值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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度服裝寄存與展會租賃服務合作協(xié)議
- 2025年度安全軟件開發(fā)人工費用支付合同
- 康養(yǎng)項目的可行性研究報告
- 中醫(yī)護理學(第5版)課件 第4章 病機
- 有機蔬菜種植技術(shù)大全
- 智能家居集成系統(tǒng)
- 政府機構(gòu)信息化建設規(guī)劃方案
- 腫瘤內(nèi)科骨肉瘤練習卷含答案
- 養(yǎng)老護理中級練習卷含答案
- 如何制定有效的資產(chǎn)配置策略有哪些因素需要考慮
- 初一年級班級日志記載表(詳)
- 建設工程安全生產(chǎn)管理習題庫及答案
- 項目1 多旋翼無人機的組裝與調(diào)試
- 供應鏈管理:高成本、高庫存、重資產(chǎn)的解決方案 第2版
- 馬克筆建筑快速表現(xiàn)
- 橋臺錐坡工程量計算公式
- 日本夏日祭活動鑒賞
- 中國教育史筆記全
- 某工業(yè)鍋爐安裝工程監(jiān)理作業(yè)指導書
- 名?!稄娀媱潯烦跎咩暯訑?shù)學講義(上)
- GB/T 41028-2021航空航天流體系統(tǒng)液壓軟管、管道和接頭組件的脈沖試驗要求
評論
0/150
提交評論