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

正文內(nèi)容

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

2022-09-01 08:16:40 本頁面
 

【正文】 e* initialize_btcache_node() { Btcache *node。 // 指針 fds所指向的數(shù)組的長度 int have_piece_index[64]。 // 最后一個(gè) piece的索引,它的值為總 piece 數(shù)減 1 int last_piece_count = 0。 // 記錄已經(jīng)下載了多少個(gè) piece extern Peer *peer_head。 // 每個(gè) piece的長度 extern char *pieces。 include include include include include sys/ include sys/ include include include include include include include extern char *file_name。緩沖區(qū)以一個(gè) piece(通常為 256KB)為基本單位,也就是臨近的 16 個(gè)結(jié)點(diǎn)為一組,這 16 個(gè)臨近的結(jié)點(diǎn)要么全部被使用要么全部空閑。 int read_last_piece_from_harddisk(Btcache *p, int index)。 // 將剛剛從 peer處獲取的一個(gè) slice存放到緩沖區(qū)中 int write_slice_to_btcache(int index,int begin,int length,unsigned char *buff,int 449 項(xiàng)目實(shí)踐: BT 下載軟件的開發(fā) 第章 13 len,Peer *peer)。 // 從硬盤上的文件中讀取一個(gè) piece存放到 p指針?biāo)赶虻木彌_區(qū)中 int read_piece_from_harddisk(Btcache *p, int index)。 // 獲取種子文件中待下載的文件個(gè)數(shù) int create_files()。 Btcache* initialize_btcache_node()。 // 緩沖區(qū)是否滿 unsigned char is_writed。 // 數(shù)據(jù)在 piece塊中的起始位置 int length。本模塊由 和 構(gòu)成。 448 Linux 系統(tǒng) 下的 C 編程 緩沖管理模塊的設(shè)計(jì)和實(shí)現(xiàn) 緩沖管理模塊維護(hù)一個(gè)大小為 16MB 的緩沖區(qū)(大小可調(diào)整),將下載到的數(shù)據(jù)先保存在緩沖區(qū)中,在達(dá)到一定的數(shù)值時(shí)再將數(shù)據(jù)寫入硬盤的文件中。 ifndef DATA_H define DATA_H include // 每個(gè) Btcache結(jié)點(diǎn)維護(hù)一個(gè)長度為 16KB的緩沖區(qū) ,該緩沖區(qū)保存一個(gè) slice的數(shù)據(jù) typedef struct _Btcache { unsigned char *buff。 // 數(shù)據(jù)的長度 unsigned char in_use。 // 緩沖區(qū)中的數(shù)據(jù)是否已經(jīng)寫入到硬盤中 int access_count。 // 為 Btcache結(jié)點(diǎn) 分配內(nèi)存空間并進(jìn)行初始化 int create_btcache()。 // 根據(jù)種子文件中的信息創(chuàng)建保存下載數(shù)據(jù)的文件 // 判斷一個(gè) Btcache結(jié)點(diǎn)中的數(shù)據(jù)要寫到哪個(gè)文件以及具體位置,并寫入 int write_btcache_node_to_harddisk(Btcache *node)。 // 將整個(gè)緩沖區(qū)中已下載的數(shù)據(jù)寫入到硬盤上的文件中 int write_btcache_to_harddisk(Peer *peer)。 // 從緩沖區(qū)獲取一個(gè) slice,讀取的 slice存放到 peer的發(fā)送緩沖區(qū)中 int read_slice_for_send(int index,int begin,int length,Peer *peer)。 int read_slice_for_send_last_piece(int index,int begin,int length,Peer *peer)。第 1~ 16 個(gè)結(jié)點(diǎn)存放一個(gè) piece,第 17~ 32 個(gè)結(jié)點(diǎn)存放一個(gè) piece,依此類推。 // 待下載文件的文件名 extern Files *files_head。 // 存放所有 piece 的 hash值 extern int pieces_length。 // 指向 peer鏈表 define btcache_len 1024 // 緩沖區(qū)中共有多少個(gè) Btcache結(jié)點(diǎn) Btcache *btcache_head = NULL。 // 針對(duì)最后一個(gè) piece,記錄已下載了多少個(gè) slice int last_slice_len = 0。 // 存放剛剛下載到的 piece的索引 int end_mode = 0。 node = (Btcache *)malloc(sizeof(Btcache))。 return NULL。 nodein_use = 0。 nodeaccess_count= 0。函數(shù)實(shí)現(xiàn)代碼如下: int create_btcache() { int i。 i++) { node = initialize_btcache_node()。 } if( btcache_head == NULL ) { btcache_head = node。 } } // 為存儲(chǔ)最后一個(gè) piece申請(qǐng)空間 int count = file_length % piece_length / (16*1024)。 if(last_slice_len == 0) last_slice_len = 16*1024。 release_memory_in_btcache()。 } else { lastnext = node。 i 64。函數(shù)實(shí)現(xiàn)代碼如下: void release_memory_in_btcache() { Btcache *p = btcache_head。 p = btcache_head。函數(shù)實(shí)現(xiàn)代碼如下: void release_last_piece() { Btcache *p = last_piece。 p = last_piece。 Files *p = files_head。 } 452 Linux 系統(tǒng) 下的 C 編程 ? int create_files() 功能:根據(jù)種子文件中的信息創(chuàng)建保存下載數(shù)據(jù)的文件。 fds_len = get_files_count()。 if( is_multi_files() == 0 ) { // 待下載的為單文件 *fds = open(file_name,O_RDWR|O_CREAT,0777)。 if(ret 0) { printf(%s:%d error,__FILE__,__LINE__)。 return 1。 return 1。 } } Files *p = files_head。 return 1。 } ret = write(fds[i],buff,1)。 i++。 Files *p。 // 如果下載的是單個(gè)文件 if( is_multi_files() == 0 ) { lseek(*fds,line_position,SEEK_SET)。 return 1。amp。 // 寫入數(shù)據(jù)完畢,退出 while循環(huán) } else if((line_position plength) amp。 // 剩余要寫的字節(jié)數(shù) lseek(fds[i],line_position,SEEK_SET)。 // 還未寫的字節(jié)數(shù) p = pnext。// 寫入剩余要寫的字節(jié)數(shù) left = 0。 left = left plength。 // 執(zhí)行到此處說明所有數(shù)據(jù)已正確寫入文件中,退出 while循環(huán) } else { // 待寫入的數(shù)據(jù)不應(yīng)寫入當(dāng)前文件 line_position = line_position plength。 } 454 Linux 系統(tǒng) 下的 C 編程 ? int read_slice_from_harddisk(Btcache *node) 功能:從硬盤讀一個(gè) slice 的數(shù)據(jù),存放到緩沖區(qū)中,在 peer 需要時(shí)發(fā)送給 peer。 參數(shù): sequence 是存放 piece 的第一個(gè) slice 的 Btcache 結(jié)點(diǎn)編號(hào),該值的范圍為 0~ 1023 中16 的整數(shù)值函數(shù)實(shí)現(xiàn)代碼如下所示: int write_piece_to_harddisk(int sequence,Peer *peer) { Btcache *node_ptr = btcache_head, *p。 if(peer==NULL) return 1。 } p = node_ptr。 while(slice_count0 amp。 slice_count。 // 從種子文件中獲取該 piece的正確的 hash值 index = pindex * 20。 i++) piece_hash2[i] = pieces[index+i]。 } // 將該 piece的所有 slice寫入文件 node_ptr = p。 Request_piece *req_q = peerRequest_piece_head。 else req_qnext = req_pnext。 } req_q = req_p。 node_ptrlength = 1。 node_ptris_writed = 0。 } // 當(dāng)前處于終端模式,則在 peer鏈表中刪除所有對(duì)該 piece 的請(qǐng)求 if(end_mode == 1) delete_request_end_mode(index_copy)。 i++) { if(have_piece_index[i] == 1) { have_piece_index[i] = index_copy。 // 打印出提示信息 printf(%%%%%% Total piece download:%d %%%%%%\n,download_piece_num)。函數(shù)實(shí)現(xiàn)的代碼如下: int read_piece_from_harddisk(Btcache *p, int index) { Btcache *node_ptr = p。 int ret。 node_ptrlength = length。 node_ptrread_write = 0。 begin += 16*1024。 } ? int write_btcache_to_harddisk(Peer *peer) 功能:將整個(gè)緩沖區(qū)中已下載的 piece 寫入硬盤,這樣可以釋放緩沖區(qū)。 int full_count = 0。 } if( (pin_use == 1) amp。 (pis_full == 1) amp。 } index_count++。函數(shù)實(shí)現(xiàn)代碼如下: int release_read_btcache_node(int base_count) { Btcache *p = btcache_head。 int slice_count = piece_length / (16*1024)。 }
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1