亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? btfiles.cpp

?? linux系統(tǒng)下bt的客戶端實現(xiàn)。 采用的是c++
?? CPP
字號:
#include "Btfiles.h"#include <unistd.h>#include <limits.h>#include <fcntl.h>#include <iostream.h>using namespace std;#ifndef PATH_MAX#define PATH_MAX 255#endif#ifndef DEBUG#define DEBUG(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__)#endifbtFiles::btFiles(){	m_head = NULL;	m_totallength = 0;	m_dirctory = NULL;}btFiles::~btFiles(){	btfile *p = m_head, *q;	for (; p;) {		delete p->path;		q = p->next;		delete p;		p = q;	}	m_head = NULL;	m_totallength = 0;	delete m_dirctory;}btfile *btFiles::new_node(){	return new btfile;}int btFiles::open_file(btfile * bf){	char fullpath[PATH_MAX];	snprintf(fullpath, PATH_MAX, "%s%c%s", m_dirctory, '/', bf->path);	if (NULL != bf->fp)		return 0;	if (NULL == fullpath || NULL == (bf->fp = fopen(fullpath, "r+")))		return -1;    DEBUG("open file %s successfully\n", fullpath);	return 0;}ssize_t btFiles::IO(char *buf, uint64_t off, size_t len, bool in){	btfile *p = m_head;	off_t l = 0, pos;	if (!buf || ((off + len) >= m_totallength))		return -1;	if (!len)		return 0;	for (; p && ((l += p->length) <= off); p = p->next);	if (!p)		return -1;	pos = p->length - (l - off);	for (; p && len;) {		if (NULL == p->fp) {			if (open_file(p) < 0)				return -1;		}		if (fseek(p->fp, pos, SEEK_SET) < 0)			return -1;		l = len > (p->length - pos) ? p->length - pos : len;				if (in) {			if (1 != fwrite(buf, l, 1, p->fp))				return -1;			fflush(p->fp);		} else {			if (1 != fread(buf, l, 1, p->fp))				return -1;		}		len -= l;		buf += l;		p = p->next;		pos = 0;	}	if (NULL == p)		return -1;	return 0;}int btFiles::allocate_disk(int fd, uint64_t len){	if (0 == len)		return 0;	if (ftruncate(fd, len) < 0) {		char c = '\0';		if (lseek(fd, len - 1, SEEK_SET) < 0)			return -1;		if (write(fd, &c, 1) < 0)			return -1;	}	return 0;}int btFiles::BuildFromMI(Bencode * pdict){	btfile **pbf = &m_head;	if (NULL == pdict || bencode_dict != pdict->m_enumType)		return -1;	std::string str = "info|name";	Bencode *pcode = query_dict(pdict, str);	if (NULL == pcode || bencode_str != pcode->m_enumType)		return -1;	m_dirctory =		new char[((BencodeString *) pcode)->m_strValue.length() + 1];	strcpy(m_dirctory, ((BencodeString *) pcode)->m_strValue.c_str());	str = "info|files";	pcode = query_dict(pdict, str);	if (pcode) {		if (pcode->m_enumType != bencode_list)			return -1;		std::vector < Bencode * >::iterator iter =			((BencodeList *) pcode)->m_list.begin();		std::vector < Bencode * >::iterator iter_end =			((BencodeList *) pcode)->m_list.end();		while (iter != iter_end) {			Bencode *p;			std::string keylist("path");			char pathname[PATH_MAX];			uint64_t len = 0;			if ((*iter)->m_enumType != bencode_dict)				return -1;			if (NULL == (p = query_dict(*iter, keylist)))				return -1;			if (0 > list2path(p, pathname))				return -1;			keylist = "length";			if (NULL == (p = query_dict(*iter, keylist)))				return -1;			if (p->m_enumType != bencode_int)				return -1;			len = ((BencodeInt *) p)->m_nValue;			m_totallength += len;			btfile *pnode = new btfile;			pnode->path = new char[strlen(pathname) + 1];			strcpy(pnode->path, pathname);			pnode->length = len;			iter++;			pnode->next = *pbf;			*pbf = pnode;			pbf = &pnode->next;		}	} else {	}	return 0;}int btFiles::list2path(Bencode * plist, char *path){	char *p = path;	if (!plist || bencode_list != plist->m_enumType)		return -1;	if (NULL == path)		return 0;	std::vector < Bencode * >::iterator iter =		((BencodeList *) plist)->m_list.begin();	std::vector < Bencode * >::iterator iter_end =		((BencodeList *) plist)->m_list.end();	while (iter != iter_end) {		if (bencode_str != (*iter)->m_enumType)			return -1;		BencodeString *pstr = (BencodeString *) (*iter);		int len = pstr->m_strValue.length();		memcpy(p, pstr->m_strValue.c_str(), len);		p += len;		*p++ = '/';		iter++;	}	p--;	*p = '\0';	return 0;}int btFiles::CreateFiles(){	btfile *p = m_head;	while (p) {		if (0 > build_file(p->path, p->length))			cout << "can't create the file:" << p->path << endl;		p = p->next;	}	return 0;}int btFiles::build_file(const char *pathname, uint64_t length){	char path[PATH_MAX], *p;	struct stat sb;	int fd;	if (snprintf(path, PATH_MAX, "%s%c%s", m_dirctory, '/', pathname) < 0)		return -1;	p = path;	for (; *p;) {		for (; p && *p && *p != '/'; p++);		if ('/' == *p) {			*p = '\0';			if (stat(path, &sb) < 0)				if (mkdir(path, 0755) < 0)					return -1;			*p++ = '/';		} else {			if (stat(path, &sb) < 0)				if (0 > (fd = creat(path, 0644))					|| allocate_disk(fd, length) < 0)					return -1;			close(fd);		}	}	return 0;}void btFiles::printout(){	btfile *pbf = m_head;	cout << "total size is:" << m_totallength << endl;	for (; pbf; pbf = pbf->next)		cout << pbf->path << endl << pbf->length << endl;}/*int main(){    Bencode *pdict = create_dictionary("ab.TORRENT");    if (NULL == pdict) {	cout << "can't create the dictionary" << endl;	exit(0);    }    btFiles bf;    bf.BuildFromMI(pdict);    if (0 > bf.CreateFiles())	cout << "create file failed" << endl;    delete_dictionary(pdict);    return 0;}*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文一区二区在线观看| 国产成人在线观看免费网站| 中文字幕av不卡| 久久久久久黄色| 精品久久久久久久久久久院品网| 欧美三级在线播放| 欧美日韩在线综合| 7777精品伊人久久久大香线蕉 | 国产精品午夜电影| 中文字幕精品一区| 一区视频在线播放| 国产成人精品1024| 国产精品久久久久久福利一牛影视| 久久亚洲影视婷婷| 国产成人h网站| www.欧美精品一二区| 91香蕉国产在线观看软件| 91丝袜美腿高跟国产极品老师| 91在线观看美女| 亚洲国产综合人成综合网站| 午夜欧美2019年伦理| 久久se这里有精品| 成人手机电影网| 91啪亚洲精品| 欧美精品 日韩| 精品sm捆绑视频| 中文字幕日韩精品一区| 午夜在线成人av| 国产毛片精品视频| 色婷婷激情综合| 国产精品一区二区91| 91在线精品一区二区三区| 日韩中文字幕区一区有砖一区 | 亚洲va欧美va人人爽| 久久99国产乱子伦精品免费| 国产91精品免费| 欧美亚一区二区| 精品久久久久99| 亚洲免费av网站| 久久伊人蜜桃av一区二区| 亚洲欧美另类在线| 国产在线精品一区在线观看麻豆| eeuss鲁一区二区三区| 日韩精品一区二区在线| 亚洲丝袜另类动漫二区| 337p日本欧洲亚洲大胆精品| 亚洲欧美激情插| 久久久蜜桃精品| 日精品一区二区三区| 成人精品在线视频观看| 麻豆精品蜜桃视频网站| 色婷婷一区二区| 2020国产精品久久精品美国| 亚洲小少妇裸体bbw| 国产高清久久久久| 91精品视频网| 亚洲成年人影院| 色婷婷综合久久久中文字幕| 国产日本一区二区| 精品在线免费视频| 91精品福利在线一区二区三区| 91麻豆国产福利在线观看| 欧美精品一区二区精品网| 亚洲成av人在线观看| 成人av一区二区三区| 久久久亚洲高清| 国产最新精品精品你懂的| 久久精品国产77777蜜臀| 欧美三级电影网站| 亚洲欧美偷拍卡通变态| 国产婷婷色一区二区三区四区| 日本免费新一区视频| 91激情在线视频| av动漫一区二区| 欧美激情综合网| 国产成a人无v码亚洲福利| 精品剧情v国产在线观看在线| 日韩一区和二区| 日韩精品国产欧美| 日韩视频中午一区| 久草在线在线精品观看| 日韩美女一区二区三区四区| 欧美成va人片在线观看| 国产一区二区精品久久91| 国产婷婷色一区二区三区四区| 国产东北露脸精品视频| 国产成人免费视频| 中文字幕第一区| av日韩在线网站| 亚洲成人精品影院| 日韩精品在线网站| 丰满放荡岳乱妇91ww| 国产精品麻豆网站| 色婷婷综合久久久久中文 | 亚洲一区二区三区四区不卡| 91成人看片片| 男女男精品视频| 久久久精品tv| 亚洲欧洲无码一区二区三区| 色综合久久66| 日韩中文字幕不卡| 国产亚洲成aⅴ人片在线观看| 久久美女高清视频| 99re这里只有精品首页| 亚洲超碰97人人做人人爱| 日韩免费福利电影在线观看| 粉嫩绯色av一区二区在线观看| 亚洲色大成网站www久久九九| 欧美在线观看一二区| 亚洲高清免费观看 | 亚洲一线二线三线视频| 日韩精品在线网站| 色婷婷国产精品综合在线观看| 亚洲高清免费视频| 欧美激情在线看| 亚洲va国产va欧美va观看| 久久这里只有精品视频网| 粉嫩av亚洲一区二区图片| 一级日本不卡的影视| 精品精品欲导航| 日本高清不卡一区| 秋霞国产午夜精品免费视频| 国产精品第一页第二页第三页| 奇米影视一区二区三区| 亚洲欧美视频在线观看| 精品久久久久久久久久久久久久久久久| 成人av一区二区三区| 精品日韩一区二区三区| 91黄色在线观看| 国产高清亚洲一区| 麻豆一区二区99久久久久| 风间由美一区二区三区在线观看| 亚洲大片免费看| 国产精品对白交换视频 | 国产成人夜色高潮福利影视| 亚洲高清免费一级二级三级| 最新热久久免费视频| 国产日韩影视精品| 欧美成人猛片aaaaaaa| 欧美在线小视频| 91麻豆免费看片| 波多野结衣一区二区三区| 韩国三级电影一区二区| 久久这里只精品最新地址| 日韩精品专区在线影院观看| 欧美日韩大陆一区二区| 亚洲人吸女人奶水| 全国精品久久少妇| 日韩精品亚洲专区| 亚洲风情在线资源站| 亚洲狠狠爱一区二区三区| 亚洲精品国产高清久久伦理二区| 国产色产综合产在线视频| 久久久综合精品| 久久婷婷一区二区三区| 成人黄色综合网站| 成人小视频免费观看| 成人免费毛片嘿嘿连载视频| 高清在线不卡av| 国产精品一二三在| 国产精品久久久久三级| 国产精品人妖ts系列视频 | 99久久久久免费精品国产| 成人app软件下载大全免费| 国产精品理论在线观看| 国产精品日韩精品欧美在线 | 色婷婷av一区二区三区软件 | 亚洲国产日韩一级| 欧美一区二区大片| 日韩精品一区二区三区视频 | 日本麻豆一区二区三区视频| 美国十次综合导航| 国产一区二区三区黄视频 | 日韩一区欧美小说| 伊人开心综合网| 偷拍一区二区三区四区| 久久精品国产99| 不卡在线视频中文字幕| 欧美性生活一区| 91精品午夜视频| 国产欧美一区二区精品婷婷| 中文字幕佐山爱一区二区免费| 一区二区三区中文字幕电影| 日韩欧美一卡二卡| 中文字幕的久久| 污片在线观看一区二区| 大胆亚洲人体视频| 欧美日韩一区中文字幕| 久久在线观看免费| 亚洲午夜免费电影| 国产精品日韩成人| 免费在线一区观看| 99久久99久久精品免费观看| 国产精品成人免费在线| 亚洲高清三级视频| 成人av电影在线播放| 欧美老肥妇做.爰bbww视频| 国产欧美视频一区二区三区| 一区二区成人在线观看| 粉嫩嫩av羞羞动漫久久久 |