?? data.h
字號:
#ifndef DATA_H
#define DATA_H
#include "peer.h"
// 每個Btcache結點維護一個長度為16KB的緩沖區,該緩沖區保存一個slice的數據
typedef struct _Btcache {
unsigned char *buff; // 指向緩沖區的指針
int index; // 數據所在的piece塊的索引
int begin; // 數據在piece塊中的起始位置
int length; // 數據的長度
unsigned char in_use; // 該緩沖區是否在使用中
unsigned char read_write; // 是發送給peer的數據還是接收到的數據
// 若數據是從硬盤讀出,read_write值為0
// 若數據將要寫入硬盤,read_write值為1
unsigned char is_full; // 緩沖區是否滿
unsigned char is_writed; // 緩沖區中的數據是否已經寫入到硬盤中
int access_count; // 對該緩沖區的訪問計數
struct _Btcache *next;
} Btcache;
Btcache* initialize_btcache_node(); // 為Btcache結點分配內存空間并進行初始化
int create_btcache(); // 創建總大小為16K*1024即16MB的緩沖區
void release_memory_in_btcache(); // 釋放data.c中動態分配的內存
int get_files_count(); // 獲取種子文件中待下載的文件個數
int create_files(); // 根據種子文件中的信息創建保存下載數據的文件
// 判斷一個Btcache結點中的數據要寫到哪個文件的哪個位置,并寫入
int write_btcache_node_to_harddisk(Btcache *node);
// 從硬盤讀出一個slice的數據存放到緩沖區中,在peer需要時發送給peer
// 要讀的slice的索引index、begin、length已存到node所指向的結點中
int read_slice_from_harddisk(Btcache *node);
// 檢查一個piece的數據是否正確,若正確則寫入硬盤上的文件
int write_piece_to_harddisk(int sequence,Peer *peer);
// 從硬盤上的文件中讀取一個piece存放到p所指向的緩沖區中
int read_piece_from_harddisk(Btcache *p, int index);
// 將16MB緩沖區中已下載的數據寫入到硬盤上的文件中
int write_btcache_to_harddisk(Peer *peer);
// 當緩沖區不夠用時,釋放那些從硬盤上讀取的piece
int release_read_btcache_node(int base_count);
// 從btcache緩沖區中清除那些未完成下載的piece
void clear_btcache_before_peer_close(Peer *peer);
// 將剛剛從peer處獲取的一個slice存放到緩沖區中
int write_slice_to_btcache(int index,int begin,int length,
unsigned char *buff,int len,Peer *peer);
// 從緩沖區獲取一個slice,讀取的slice存放到peer的發送緩沖區中
int read_slice_for_send(int index,int begin,int length,Peer *peer);
// 以下是為下載和上傳最后一個piece而增加的函數
// 最后一個piece較為特殊,因為它是一個不完整的piece
int write_last_piece_to_btcache(Peer *peer);
int write_slice_to_last_piece(int index,int begin,int length,
unsigned char *buff,int len,Peer *peer);
int read_last_piece_from_harddisk(Btcache *p, int index);
int read_slice_for_send_last_piece(int index,int begin,int length,Peer *peer);
void release_last_piece();
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -