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

正文內(nèi)容

bt軟件下載開發(fā)完整版-01(存儲版)

2024-09-30 08:16上一頁面

下一頁面
  

【正文】 ce_count == 0) { used_count = 0。 } if(p != NULL) { p = q。 paccess_count = 0。 int num = 0。 num。 p!=NULL) { if(pindex==index amp。 } break。 pin_use = 0。 Btcache *p = btcache_head, *q = NULL。 while(p != NULL) { if(count%slice_count == 0) q = p。 while(count 0) { p = pnext。 pis_full==1) return 0。 paccess_count = 0。 write_piece_to_harddisk(sequence,peer)。 p = btcache_head。 count = begin / (16*1024)。 pis_full = 1。 if(i == 2) release_read_btcache_node(8)。函數(shù)的實現(xiàn)代碼如下: int read_slice_for_send(int index,int begin,int length,Peer *peer) { Btcache *p = btcache_head, *q。 } // 緩沖區(qū)中已存在待獲取的 slice while(p != NULL) { if( pindex==index amp。 pis_full==1 ) { // 構(gòu)造 piece消息 ret = create_piece_msg(index,begin,pbuff,plength,peer)。 count = 0。 } if(p != NULL) { read_piece_from_harddisk(q,index)。 pin_use==1 amp。 } } // 使緩沖區(qū)留 出空閑的區(qū)塊來存放 slice 所在的 piece if(i == 4) write_btcache_to_harddisk(peer)。 } pindex = index。 if(p != NULL) free(p)。我們期望,在這 30 秒內(nèi),本客戶端提供給該 peer較快的下載速度,然后該 peer 將本客戶端解除阻塞,這樣就 可以從該 peer 處下載數(shù)據(jù),并在下次選擇非阻塞 peer 時,該 peer 能成為 4 個非阻塞 peer 中的一個。 // 選擇 unchoke peer int select_optunchoke_peer()。 // 已連接的總 Peer數(shù) Unchoke_peers unchoke_peers。 // 每個 piece的長度 extern Btcache *btcache_head。 // 總的下載量和上傳量 463 項目實踐: BT 下載軟件的開發(fā) 第章 13 float total_down_rate = , total_up_rate = 。 void init_unchoke_peers()。經(jīng)過分析和對比, 現(xiàn)在通用的計算下載速度的方法是每 10 秒計算一次速度,統(tǒng)計最近 10 秒內(nèi)從每個 peer 處下載的數(shù)據(jù)量,然后除以時間,得到最近這段時間的下載速度,并將下載速度最快的 4 個 peer 解除阻塞,允許它們從本客戶端下載,除一個特殊的 peer 外其他 peer 將被阻塞。 return 1。 if(p == NULL) { printf(%s:%d allocate memory error,__FILE__,__LINE__)。 return 0。 plength==length amp。 // 找到一個空閑的 piece count++。 } int i = 4, count, slice_count, unuse_count。 pin_use==1 amp。 } if(index == last_piece_index) { read_slice_for_send_last_piece(index,begin,length,peer)。 } ? int read_slice_for_send(int index,int begin,int length,Peer *peer) 功能:從緩沖區(qū)獲取一個 slice,讀取的 slice 存放到 peer 的發(fā)送緩沖區(qū)中。 } if(i == 4) write_btcache_to_harddisk(peer)。 pin_use = 1。 p = pnext。 // 計數(shù)當(dāng)前指向第幾個 slice unuse_count = 0。sequence)。 pis_full = 1。 pread_write==1 amp。 } // p非空說明當(dāng)前 slice所在 piece的部分?jǐn)?shù)據(jù)已經(jīng)下載 if(p != NULL) { count = begin / (16*1024)。 } // 當(dāng)處于終端模式時,先判斷該 slice 所在的 piece是否已被下載 if(end_mode == 1) { if( get_bit_value(bitmap,index) == 1 ) return 0。 } } ? write_slice_to_btcache(int index,int begin,int length,unsigned char *buff,int len,Peer *peer) 功能:將從 peer 處獲取的一個 slice 存儲到緩沖區(qū)中。 pbegin = 1。 num。 while(num0 amp。amp。 int slice_count = piece_length / (16*1024)。 pis_full = 0。 // 找到一個空閑的 piece count++。 int slice_count = piece_length / (16*1024)。 } index_count++。 } if( (pin_use == 1) amp。 } ? int write_btcache_to_harddisk(Peer *peer) 功能:將整個緩沖區(qū)中已下載的 piece 寫入硬盤,這樣可以釋放緩沖區(qū)。 node_ptrread_write = 0。 int ret。 // 打印出提示信息 printf(%%%%%% Total piece download:%d %%%%%%\n,download_piece_num)。 } // 當(dāng)前處于終端模式,則在 peer鏈表中刪除所有對該 piece 的請求 if(end_mode == 1) delete_request_end_mode(index_copy)。 node_ptrlength = 1。 else req_qnext = req_pnext。 } // 將該 piece的所有 slice寫入文件 node_ptr = p。 // 從種子文件中獲取該 piece的正確的 hash值 index = pindex * 20。 while(slice_count0 amp。 if(peer==NULL) return 1。 } 454 Linux 系統(tǒng) 下的 C 編程 ? int read_slice_from_harddisk(Btcache *node) 功能:從硬盤讀一個 slice 的數(shù)據(jù),存放到緩沖區(qū)中,在 peer 需要時發(fā)送給 peer。 left = left plength。 // 還未寫的字節(jié)數(shù) p = pnext。 // 寫入數(shù)據(jù)完畢,退出 while循環(huán) } else if((line_position plength) amp。 return 1。 Files *p。 } ret = write(fds[i],buff,1)。 } } Files *p = files_head。 return 1。 if( is_multi_files() == 0 ) { // 待下載的為單文件 *fds = open(file_name,O_RDWR|O_CREAT,0777)。 } 452 Linux 系統(tǒng) 下的 C 編程 ? int create_files() 功能:根據(jù)種子文件中的信息創(chuàng)建保存下載數(shù)據(jù)的文件。 p = last_piece。 p = btcache_head。 i 64。 release_memory_in_btcache()。 } } // 為存儲最后一個 piece申請空間 int count = file_length % piece_length / (16*1024)。 i++) { node = initialize_btcache_node()。 nodeaccess_count= 0。 return NULL。 // 存放剛剛下載到的 piece的索引 int end_mode = 0。 // 指向 peer鏈表 define btcache_len 1024 // 緩沖區(qū)中共有多少個 Btcache結(jié)點 Btcache *btcache_head = NULL。 // 待下載文件的文件名 extern Files *files_head。 int read_slice_for_send_last_piece(int index,int begin,int length,Peer *peer)。 // 將整個緩沖區(qū)中已下載的數(shù)據(jù)寫入到硬盤上的文件中 int write_btcache_to_harddisk(Peer *peer)。 // 為 Btcache結(jié)點 分配內(nèi)存空間并進(jìn)行初始化 int create_btcache()。 // 數(shù)據(jù)的長度 unsigned char in_use。 448 Linux 系統(tǒng) 下的 C 編程 緩沖管理模塊的設(shè)計和實現(xiàn) 緩沖管理模塊維護(hù)一個大小為 16MB 的緩沖區(qū)(大小可調(diào)整),將下載到的數(shù)據(jù)先保存在緩沖區(qū)中,在達(dá)到一定的數(shù)值時再將數(shù)據(jù)寫入硬盤的文件中。 // 數(shù)據(jù)在 piece塊中的起始位置 int length。 Btcache* initialize_btcache_node()。 // 從硬盤上的文件中讀取一個 piece存放到 p指針?biāo)赶虻木彌_區(qū)中 int read_piece_from_harddisk(Btcache *p, int in
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1