📄 btfiles.h
字号:
#ifndef BTFILES_H
#define BTFILES_H
#include "./def.h"
#include <sys/types.h>
#include <stdio.h>
#include "bitfield.h"
typedef struct _btfile //结构BTFILE存储文件的路径,长度,分块等信息。如果要下载的是多个文件,
{ //那么BTFILE便是一个文件链表,此时包含多个文件的整个链表便被当成一个大的文件看待。
char *bf_filename; // full path of file.文件的绝对路径
u_int64_t bf_length; //文件长度。单位:B
FILE *bf_fp; //文件的FILE指针
time_t bf_last_timestamp; // last io timestamp.最后一次进行io操作的时间戳
u_int64_t bf_completed; // already downloaded length,已经下载的数据长度。单位:B
size_t bf_npieces; //number of pieces,文件的piece数目
unsigned char bf_flag_opened:1; //文件打开标志位。若此文件已被_btf_open()打开,则置为1
unsigned char bf_flag_need:1; //程序中只给出了定义,没有使用
unsigned char bf_reserved:6; //保留项,没有使用
struct _btfile *bf_next; //链表中下一个文件的指针。单文件情况下为空
}BTFILE;
class btFiles //类btFiles包含了需要下载的数据文件的信息。这些文件可能是一个,也可能是多个。
{
private:
BTFILE *m_btfhead;
char *m_directory; //在多文件情形下,制作种子文件时,为包含要制作种子的文件的目录;
//下载数据文件时,为种子文件中包含所有文件的那个目录。若只有一个文件,则为空。
u_int64_t m_total_files_length; //所有文件长度。单位:B
size_t m_total_opened; // already opened,已打开的所有文件数目
u_int8_t m_flag_automanage:1; //m_flag_automanage是自动管理文件打开数目的标志。虽然初始值为1,但在构造函数中又将此项赋为0。
u_int8_t m_flag_reserved:7; // current version not implement,保留项,程序中没有使用
BTFILE* _new_bfnode();
int _btf_open(BTFILE *sbf_p);
int _btf_ftruncate(int fd,int64_t length);
int _btf_creat_by_path(const char *pathname, int64_t file_length);
int _btf_destroy();
int _btf_recurses_directory(const char *cur_path, BTFILE *lastnode);
public:
int CreateFiles();
btFiles();
~btFiles();
int BuildFromFS(const char *pathname);
int BuildFromMI(const char *metabuf, const size_t metabuf_len, const char *saveas);
u_int64_t GetTotalLength() const { return m_total_files_length; }
ssize_t IO(char *buf, u_int64_t off, size_t len, const int iotype);
size_t FillMetaInfo(FILE* fp);
void SetFilter(int nfile, BitField *pFilter,size_t pieceLength);
size_t getFilePieces(size_t nfile);
#ifndef WINDOWS
void PrintOut();
#endif
BTFILE *GetNextFile(BTFILE *file);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -