freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

bt軟件下載開發(fā)完整版-01-預(yù)覽頁

2025-09-21 08:16 上一頁面

下一頁面
 

【正文】 BT協(xié)議 450 Linux 系統(tǒng) 下的 C 編程 中各個函數(shù)的定義如下。 if(node == NULL) { return NULL。 } nodeindex = 1。 noderead_write = 1。 nodenext = NULL。 Btcache *node, *last。 if( node == NULL ) { printf(%s:%d create_btcache error\n,__FILE__,__LINE__)。 last = node。 if(file_length % piece_length % (16*1024) != 0) count++。 last_piece_index = pieces_length / 20 1。 return 1。 last = node。 i++) { have_piece_index[i] = 1。 while(p != NULL) { btcache_head = pnext。 } release_last_piece()。 while(p != NULL) { last_piece = pnext。 } } ? int get_files_count() 功能:判斷種子文件中待下載的文件個數(shù)。 while(p != NULL) { count++。通過 lseek 和 write 兩個函數(shù)來實現(xiàn)物理存儲空間的分配。 if(fds_len 0) return 1。 if(*fds 0) { printf(%s:%d error,__FILE__,__LINE__)。 return 1。 } } else { // 待下載的是多個文件 ret = chdir(file_name)。 } ret = chdir(file_name)。 i = 0。 } ret = lseek(fds[i],plength1,SEEK_SET)。 if(ret != 1) { printf(%s:%d error,__FILE__,__LINE__)。 } //while的循環(huán)結(jié)束 } //end else return 0。 int i。 write(*fds,nodebuff,nodelength)。 } p = files_head。 (line_position+nodelength plength)) { // 如果待寫入的數(shù)據(jù) (即一個長度為 16KB 的 slice)屬于同一個文件 lseek(fds[i],line_position,SEEK_SET)。amp。 write(fds[i],nodebuff,plength line_position)。 // 用于獲取下一個文件的長度 i++。 } else { // 當(dāng)前文件的長度小于要寫的字節(jié)數(shù) lseek(fds[i],0,SEEK_SET)。 i++。 i++。 該函數(shù)非常類似于 write_btcache_node_to_harddisk,限于篇幅此處不再列出。 unsigned char piece_hash1[20], piece_hash2[20]。 int i = 0。 // p指針指向 piece的第一個 slice所在的 btcache結(jié)點 // 計算剛剛下載到的這個 piece的 hash 值 SHA1_CTX ctx。amp。 node_ptr = node_ptrnext。 index_copy = pindex。 // 比較兩個 hash值,若兩者一致說明下載了一個正確的 piece int ret = memcmp(piece_hash1,piece_hash2,20)。 slice_count = piece_length / (16*1024)。 while(req_p != NULL) { if(req_pbegin==node_ptrbegin amp。 free(req_p)。 req_p = req_pnext。 node_ptrin_use = 0。 node_ptraccess_count = 0。 // 更新位圖 set_bit_value(bitmap,index_copy,1)。 break。 printf(writed piece index:%d \n,index_copy)。 int begin = 0。 if(p==NULL || index=pieces_length/20) return 1。 456 Linux 系統(tǒng) 下的 C 編程 ret = read_slice_from_harddisk(node_ptr)。 node_ptris_full = 1。 slice_count。函數(shù)實現(xiàn)的代碼如下: int write_btcache_to_harddisk(Peer *peer) { Btcache *p = btcache_head。 int first_index。amp。amp。 p = pnext。 Btcache *q = NULL。 if(base_count 0) return 1。amp。 p = pnext。 plength = 1。 pis_writed = 0。 } } return 0。 int count = 0。amp。 p!=NULL) { p = pnext。 } if( count%slice_count!=0 || pread_write!=1 || pis_full!=1) break。amp。amp。 p = pnext。 } ? void clear_btcache() 功能:將整個緩沖區(qū)中所存的所有數(shù)據(jù)清空。 plength = 1。 pis_writed = 0。函數(shù)實現(xiàn)的代碼如下: int write_slice_to_btcache(int index,int begin,int length,unsigned char *buff,int len,Peer *peer) { int count = 0, slice_count, unuse_count。 if(buff==NULL || peer==NULL) return 1。 } // 遍歷緩沖區(qū),檢查當(dāng)前 slice所在 piece的其他數(shù)據(jù)是否已存在 // 若存在說明不是一個新的 piece,若不存在說明是一個新的 piece slice_count = piece_length / (16*1024)。 pin_use==1) break。 // count 存放當(dāng)前要存的 slice在 piece中的索引值 p = q。amp。amp。 plength = length。 pis_writed = 0。 // 如果是剛剛開始下載 (下載到的 piece不足 10 個 ),則立即寫入硬盤并告知 peer if(download_piece_num 10) { int sequence。 if(ret == 1) { printf( begin write a piece to harddisk \n)。 } // p為空說明當(dāng)前 slice是其所在的 piece第一塊下載到的數(shù)據(jù) // 首先判斷是否存在空 的緩沖區(qū) ,若不存在 ,則將已下載的寫入硬盤 int i = 4。 // 計數(shù)當(dāng)前 piece中有多少個空的 slice Btcache *q。 } if(pin_use == 0) unuse_count++。 } if(p != NULL) { p = q。 } pindex = index。 460 Linux 系統(tǒng) 下的 C 編程 pread_write = 1。 memcpy(pbuff,buff,len)。 if(i == 3) release_read_btcache_node(16)。 } // 如果還沒有空閑的緩沖區(qū) ,丟棄下載到的這個 slice printf(+++++ write a slice to btcache FAILED :NO BUFFER +++++\n)。若緩沖區(qū)中不存在該 slice,則從硬盤讀 slice 所在的 piece 到緩沖區(qū)中。 ret = get_bit_value(bitmap,index)。 return 0。amp。amp。 } paccess_count = 1。 while(i 0) { slice_count = piece_length / (16*1024)。 q = p。 p = pnext。amp。amp。 if(ret 0) { printf(Function create piece msg error\n)。 // 函數(shù)返回 } p = pnext。 if(i == 1) release_read_btcache_node(0)。 return 1。 read_slice_from_harddisk(p)。 } // 釋放剛剛申請的內(nèi)存 if(pbuff != NULL) free(pbuff)。 462 Linux 系統(tǒng) 下的 C 編程 策略管理模塊的設(shè)計和實現(xiàn) 策略管理模塊負(fù)責(zé)策略的實現(xiàn),主要是計算各個 peer 的下載和上傳速度,根據(jù)下載速度選擇非阻塞 peer,采用隨機算法選擇優(yōu)化非阻塞 peer,以及實現(xiàn)片斷選擇策略。為了發(fā)現(xiàn)更快下載速度的 peer,任何時刻保證存在一個優(yōu)化非阻塞 peer,將這個 peer 解除阻塞,而暫時不管從該 peer處下載數(shù)據(jù)的速度,每隔 30 秒重新進行選擇。 // 保存非阻塞 peer的指針 int count。 // 初始化 unchoke_peers int select_unchoke_peer()。 // 計算總的上傳下載速度 int is_seed(Peer *node)。 // 總的下載上傳速度 int total_peers = 0。 // 指向己方的位 圖 extern Peer *peer_head。
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1