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

正文內(nèi)容

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

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

下一頁面
  

【正文】 ead。 } break。 pis_full==1) plete++。 p!=NULL) { if(pindex==index amp。 *sequence = count。 num。 pindex!=index ) { num = slice_count。 int num = 0。 } ? int is_a_plete_piece(int index, int *sequence) 功能:下載完一個 slice 后,檢查是否該 slice 為 piece 的最后一個 shice。 paccess_count = 0。 pin_use = 0。 } if(p != NULL) { p = q。 pread_write==0) used_count += paccess_count。 while(p != NULL) { 457 項(xiàng)目實(shí)踐: BT 下載軟件的開發(fā) 第章 13 if(count % slice_count == 0) { used_count = 0。 int count = 0。 } return 0。 (pis_writed == 0) ) { full_count++。 (pread_write == 1) amp。 while(p != NULL) { if(index_count % slice_count == 0) { full_count = 0。 int slice_count = piece_length / (16*1024)。 node_ptr = node_ptrnext。 node_ptris_writed = 0。 if(ret 0) return 1。 while(slice_count 0) { node_ptrindex = index。 int length = 16*1024。 return 0。 } } // 更新 download_piece_num,每下載 10個 piece就將位圖寫入文件 download_piece_num++。 // 保存 piece的 index,準(zhǔn)備給所有的 peer 發(fā)送 have消息 for(i = 0。 node_ptr = node_ptrnext。 node_ptrread_write = 1。 } node_ptrindex = 1。 req_p = req_q = NULL。amp。 while(slice_count 0) { write_btcache_node_to_harddisk(node_ptr)。 if(ret != 0) { printf(piece hash is wrong\n)。 // 存放 piece的 index for(i = 0。 } SHA1Final(piece_hash1,amp。 node_ptr!=NULL) { SHA1Update(amp。 SHA1Init(amp。 while(i sequence) { node_ptr = node_ptrnext。 int slice_count = piece_length / (16*1024)。 具體代碼請參考本書所附源代碼。 p = pnext。 p = pnext。 write(fds[i],nodebuff+offset,plength)。 // 獲取下一個文件描述符 while(left 0) { if(plength = left) { // 當(dāng) 前文件的長度大于等于要寫的字節(jié)數(shù) lseek(fds[i],0,SEEK_SET)。 offset = plength line_position。 (line_position+nodelength = plength) ) { // 如果待寫入的數(shù)據(jù)跨越了兩個或兩個以上的文件 int offset = 0。 write(fds[i],nodebuff,nodelength)。 i = 0。 return 0。 if((node == NULL) || (fds == NULL)) return 1。 } ? int write_btcache_node_to_harddisk(Btcache *node) 功能:判斷一個 Btcache 結(jié) 點(diǎn)(即一個 slice)的數(shù)據(jù)要寫到哪個文件以及具體位置,并寫入。 return 1。 if(ret 0) { printf(%s:%d error,__FILE__,__LINE__)。 while(p != NULL) { fds[i] = open(ppath,O_RDWR|O_CREAT,0777)。 if(ret 0) { printf(%s:%d error,__FILE__,__LINE__)。 if(ret 0) { // 改變目錄失敗,說明該目錄還未創(chuàng)建 ret = mkdir(file_name,0777)。 } ret = write(*fds,buff,1)。 return 1。 fds = (int *)malloc(fds_len * sizeof(int))。函數(shù)實(shí)現(xiàn)代碼如下: int create_files() { int ret, i。 p = pnext。函數(shù)實(shí)現(xiàn)代碼如下: int get_files_count() { int count = 0。 if(pbuff != NULL) free(pbuff)。 if(fds != NULL) free(fds)。 if(pbuff != NULL) free(pbuff)。 } return 0。 } count。 451 項(xiàng)目實(shí)踐: BT 下載軟件的開發(fā) 第章 13 } if(last_piece == NULL) { last_piece = node。 // 最后一個 piece的 index值 while(count 0) { node = initialize_btcache_node()。 last_piece_count = count。 } else { lastnext = node。 release_memory_in_btcache()。 // node指向剛剛創(chuàng)建的結(jié)點(diǎn)、 last指向緩沖區(qū)中最后一個結(jié)點(diǎn) for(i = 0。 return node。 nodeis_full = 0。 nodebegin = 1。 } nodebuff = (unsigned char *)malloc(16*1024)。 ? Btcache* initialize_btcache_node() 功能:創(chuàng)建 Btcache 結(jié)點(diǎn),分配內(nèi)存空間并對其成員的值進(jìn)行初始化。 // 存放文件描述符 int fds_len = 0。 // 存放待下載文件的最后一個 piece int last_piece_index = 0。 // 指向己方的位圖 extern int download_piece_num。 // 待下載文件的總長度 extern int piece_length。 以下是 文件的頭部包含的代碼,主要包含一些頭文件和定義了一些全局變量。 endif 每個緩沖區(qū)結(jié)點(diǎn)的大小為 16KB,默認(rèn)生成 1024 個結(jié)點(diǎn),總大小為 16MB。 int write_slice_to_last_piece(int index,int begin,int length,unsigned char *buff,int len,Peer *peer)。 // 從 btcache緩沖區(qū)中清除那些未完成下載的 piece void clear_btcache_before_peer_close(Peer *peer)。 // 檢查一個 piece的數(shù)據(jù)是否正確 ,若正確則寫入硬盤上的文件 int write_piece_to_harddisk(int sequence,Peer *peer)。 // 釋放 int get_files_count()。 } Btcache。 // 是發(fā)送給 peer的數(shù)據(jù)還是接收到的數(shù)據(jù) // 若數(shù)據(jù)是從硬盤讀出 ,read_write值為 0 // 若數(shù)據(jù)將要寫 入硬盤 ,read_write值為 1 unsigned char is_full。 // 數(shù)據(jù)所在的 piece塊的索引 int begin。除了管理緩沖區(qū),本模塊還負(fù)責(zé)創(chuàng)建待下載的文件,把下載到的 piece 寫入文件,在 peer 請求數(shù)據(jù)時讀文件。 peer 請求數(shù)據(jù)時,先在緩沖區(qū)中尋找,若緩沖區(qū)中不存在所請求的數(shù)據(jù),則讀文件并把請求數(shù)據(jù)所在的 piece 預(yù)先讀入到緩沖區(qū)中。 // 指向緩沖區(qū)的指針 int index。 // 該緩沖區(qū)是否在使用中 unsigned char read_write。 // 對該緩沖區(qū)的訪問計(jì)數(shù) struct _Btcache *next。 // 創(chuàng)建總大小為 16K*1024即 16MB的緩沖區(qū) void release_memory_in_btcache()。 // 從硬盤讀出一個 slice的數(shù)據(jù)存放到緩沖區(qū)中 ,在 peer需要時發(fā)送給 peer // 要讀入的 slice的索引, index、 begin、 length已存到 node所指向的結(jié)點(diǎn)中 int read_slice_from_harddisk(Btcache *node)。 // 當(dāng)緩沖區(qū)不夠用時 ,釋放那些從硬盤上讀取的 piece int release_read_btcache_node(int base_count)。 // 以下是為下載和上傳最后一個 piece而增加的函數(shù) // 最后一個 piece較為特殊 ,因?yàn)樗且粋€不完整的 piece int write_last_piece_to_btcache(Peer *peer)。 void release_last_piece()。為了方便處理,所有緩沖區(qū)在程序啟動時統(tǒng)一申請,在程序結(jié)束時一起被釋放。 // 對于多文件種子有效,存放各個文件的路徑和長度 extern int file_length。 // 緩沖區(qū) pieces的長度 extern Bitmap *bitmap。 // 指向一個大小為 16MB的緩沖區(qū) Btcache *last_piece = NULL。 // 最后一個 piece的最后一個 slice的長度 int *fds = NULL。 // 是否進(jìn)入了終端模式,終端模式的含義參考
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1