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

正文內容

bt軟件下載開發(fā)完整版-01-文庫吧在線文庫

2024-10-04 08:16上一頁面

下一頁面
  

【正文】 dex)。 int read_last_piece_from_harddisk(Btcache *p, int index)。 include include include include include sys/ include sys/ include include include include include include include extern char *file_name。 // 記錄已經下載了多少個 piece extern Peer *peer_head。 // 指針 fds所指向的數組的長度 int have_piece_index[64]。 if(nodebuff == NULL) { if(node != NULL) free(node)。 nodeis_writed = 0。 i btcache_len。 last = node。 if(node == NULL) { printf(%s:%d create_btcache error\n,__FILE__,__LINE__)。 } for(i = 0。 free(p)。 free(p)。 } return count。 if(fds == NULL) return 1。 if(ret != 1) { printf(%s:%d error,__FILE__,__LINE__)。 return 1。 return 1。函數實現代碼如下: int write_btcache_node_to_harddisk(Btcache *node) { long long line_position。 } // 下載的是多個文件 if(files_head == NULL) { printf(%s:%d file_head is NULL,__FILE__,__LINE__)。 break。 // offset存放已寫的字節(jié)數 left = left (plength line_position)。 // 先寫滿當前文件 offset = offset + plength。 } } return 0。 // 一個 piece所含的 slice數 int index, index_copy。ctx)。ctx)。 return 1。 req_pindex==node_ptrindex) { if(req_p == peerRequest_piece_head) 455 項目實踐: BT 下載軟件的開發(fā) 第章 13 peerRequest_piece_head = req_pnext。 node_ptrbegin = 1。 slice_count。 if(download_piece_num % 10 == 0) restore_bitmap()。 int slice_count = piece_length / (16*1024)。 node_ptrin_use = 1。 } return 0。 first_index = index_count。 } if(full_count == slice_count) { write_piece_to_harddisk(first_index,peer)。 int used_count = 0。 if(used_count == base_count) break。 pread_write = 1。函數實現代碼如下: int is_a_plete_piece(int index, int *sequence) { Btcache *p = btcache_head。 while(num0 amp。 num = slice_count。 else break。 while(node != NULL) { pindex = 1。 node = nodenext。 return 0。 p = pnext。amp。 pread_write = 1。 ret = is_a_plete_piece(index,amp。 count = 0。 // 找到一個空閑的 piece count++。 plength = length。 return 0。 return 0。 return 1。amp。 // 函數返回 } p = pnext。 if(unuse_count == slice_count) break。amp。 } paccess_count = 1。 } // 如果 沒有緩沖區(qū)了 ,就不讀 slice所在的 piece 到緩沖區(qū)中 p = initialize_btcache_node()。 if(ret 0) { printf(Function create piece msg error\n)。 BT 協(xié)議的設計者也承認計算從各個 peer 處下載數據的速度是一個棘手的問題。 // 保存優(yōu) 化非阻塞 peer的指針 } Unchoke_peers。 // 構造數據請求 endif 文件的頭部包含的代碼為: include include include include include include include include long long total_down = 0L, total_up = 0L。 // 所有 piece hash 值的長度 extern int piece_length。 // 存放非阻塞 Peer和優(yōu)化非阻塞 Peer的指針 extern int end_mode。 // 從 peer隊列中選擇一個優(yōu)化非阻塞 peer int pute_rate()。片斷選擇策略,也就是選擇下載哪些 slice,請參考前面部分的 BT 協(xié)議。 return 0。 pbegin = begin。 if(i == 3) release_read_btcache_node(16)。amp。 p = q。 // 計數當前指向第幾個 slice 461 項目實踐: BT 下載軟件的開發(fā) 第章 13 p = btcache_head。 if(ret 0) { printf(Function create piece msg error\n)。amp。 // q指針指向每個 piece的第一個 slice int ret。 if(i == 1) release_read_btcache_node(0)。 pis_writed = 0。 while(count 0) { p = pnext。 while(p != NULL) { if(count%slice_count == 0) { unuse_count = 0。 printf( end write a piece to harddisk \n)。 memcpy(pbuff,buff,len)。 // 該 slice已存在 pindex = index。 count。 if(pindex==index amp。 // q 指針指向每個 piece第一個 slice if(p == NULL) return 1。 pread_write = 1。 } 458 Linux 系統(tǒng) 下的 C 編程 if(plete == slice_count) return 1。amp。 count++。 int plete = 0。 slice_count。 while(slice_count 0) { pindex = 1。 q = p。 } ? int release_read_btcache_node(int base_count) 功能:當緩沖區(qū)不夠用時,釋放那些從硬盤上讀取的 piece。amp。 int index_count = 0。 node_ptraccess_count = 0。 node_ptrbegin = begin。 } ? int read_piece_from_harddisk(Btcache *p, int index) 功能:從硬盤上的文件中讀取一個 piece 到 p 指針所指向的緩沖區(qū)中。 i 64。 node_ptris_full = 0。 break。 // 在 peer的請求隊列中刪除 piece請 求 Request_piece *req_p = peerRequest_piece_head。 i 20。ctx,node_ptrbuff,16*1024)。 i++。 ? int write_piece_to_harddisk(int sequence,Peer *peer) 功能:檢查下載完的一個 piece 的數據是否正確,若正確則寫入文件。 } } break。 write(fds[i],nodebuff+offset,left)。 // buff內的偏移 ,也是已寫的字節(jié)數 int left = nodelength。 while(p != NULL) { if((line_position plength) amp。 453 項目實踐: BT 下載軟件的開發(fā) 第章 13 // 無論下載的是多文件還是單個文件,將要下載的所有數據看 作一個線性字節(jié)流 // 變量 line_position的值是要寫入硬盤的線性位置 // 變量 piece_length的值為每個 piece長度,它被定義在 line_position = nodeindex * piece_length + nodebegin。 } p = pnext。 if(fds[i] 0) { printf(%s:%d error,__FILE__,__LINE__)。 if(ret 0) { printf(%s:%d error,__FILE__,__LINE__)。 } ret = lseek(*fds,file_length1,SEEK_SET)。 char buff[1] = { 0x0 }。 if(is_multi_files() == 0) return 1。 } ? void
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1