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

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

?? bitfield.c

?? 在Linux環(huán)境下用c編寫的BT文件源碼
?? C
字號:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <malloc.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "parse_metafile.h"
#include "bitfield.h"

extern int  pieces_length;
extern char *file_name;

Bitmap      *bitmap = NULL;         // 指向位圖
int         download_piece_num = 0; // 當前已下載的piece數(shù) 

// 如果存在一個位圖文件,則讀位圖文件并把獲取的內(nèi)容保存到bitmap
// 如此一來,就可以實現(xiàn)斷點續(xù)傳,即上次下載的內(nèi)容不至于丟失
int create_bitfield()
{
	bitmap = (Bitmap *)malloc(sizeof(Bitmap));
	if(bitmap == NULL) { 
		printf("allocate memory for bitmap fiailed\n"); 
		return -1;
	}

	// pieces_length除以20即為總的piece數(shù)
	bitmap->valid_length = pieces_length / 20;
	bitmap->bitfield_length = pieces_length / 20 / 8;
	if( (pieces_length/20) % 8 != 0 )  bitmap->bitfield_length++;

	bitmap->bitfield = (unsigned char *)malloc(bitmap->bitfield_length);
	if(bitmap->bitfield == NULL)  { 
		printf("allocate memory for bitmap->bitfield fiailed\n"); 
		if(bitmap != NULL)  free(bitmap);
		return -1;
	}

	char bitmapfile[64];
	sprintf(bitmapfile,"%dbitmap",pieces_length);
	
	int  i;
	FILE *fp = fopen(bitmapfile,"rb");
	if(fp == NULL) {  // 若打開文件失敗,說明開始的是一個全新的下載
		memset(bitmap->bitfield, 0, bitmap->bitfield_length);
	} else {
		fseek(fp,0,SEEK_SET);
		for(i = 0; i < bitmap->bitfield_length; i++)
			(bitmap->bitfield)[i] = fgetc(fp);
		fclose(fp); 
		// 給download_piece_num賦新的初值
		download_piece_num = get_download_piece_num();
	}
	
	return 0;
}

int get_bit_value(Bitmap *bitmap,int index)  
{
	int           ret;
	int           byte_index;
	unsigned char byte_value;
	unsigned char inner_byte_index;

	if(index >= bitmap->valid_length)  return -1;

	byte_index = index / 8;
	byte_value = bitmap->bitfield[byte_index];
	inner_byte_index = index % 8;

	byte_value = byte_value >> (7 - inner_byte_index);
	if(byte_value % 2 == 0) ret = 0;
	else                    ret = 1;

	return ret;
}

int set_bit_value(Bitmap *bitmap,int index,unsigned char v)
{
	int           byte_index;
	unsigned char inner_byte_index;

	if(index >= bitmap->valid_length)  return -1;
	if((v != 0) && (v != 1))   return -1;

	byte_index = index / 8;
	inner_byte_index = index % 8;

	v = v << (7 - inner_byte_index);
	bitmap->bitfield[byte_index] = bitmap->bitfield[byte_index] | v;

	return 0;
}

int all_zero(Bitmap *bitmap)
{
	if(bitmap->bitfield == NULL)  return -1;
	memset(bitmap->bitfield,0,bitmap->bitfield_length);
	return 0;
}
 
int all_set(Bitmap *bitmap)
{
	if(bitmap->bitfield == NULL)  return -1;
	memset(bitmap->bitfield,0xff,bitmap->bitfield_length);
	return 0;	
}

void release_memory_in_bitfield()
{
	if(bitmap->bitfield != NULL) free(bitmap->bitfield);
	if(bitmap != NULL)  free(bitmap);
}

int print_bitfield(Bitmap *bitmap)
{
	int i;

	for(i = 0; i < bitmap->bitfield_length; i++) {
		printf("%.2X ",bitmap->bitfield[i]);
		if( (i+1) % 16 == 0)  printf("\n");
	}
	printf("\n");

	return 0;
}

int restore_bitmap()
{
	int  fd;
	char bitmapfile[64];
	
	if( (bitmap == NULL) || (file_name == NULL) )  return -1;
	
	sprintf(bitmapfile,"%dbitmap",pieces_length);
	fd = open(bitmapfile,O_RDWR|O_CREAT|O_TRUNC,0666);
	if(fd < 0)  return -1;
	
	write(fd,bitmap->bitfield,bitmap->bitfield_length);
	close(fd);
	
	return 0;
}

int is_interested(Bitmap *dst,Bitmap *src)
{
	unsigned char const_char[8] = { 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
	unsigned char c1, c2;
	int           i, j;
	
	if( dst==NULL || src==NULL )  return -1;
	if( dst->bitfield==NULL || src->bitfield==NULL )  return -1;
	if( dst->bitfield_length!=src->bitfield_length ||
		dst->valid_length!=src->valid_length )
		return -1;
	
	for(i = 0; i < dst->bitfield_length-1; i++) {
		for(j = 0; j < 8; j++) {
			c1 = (dst->bitfield)[i] & const_char[j];
			c2 = (src->bitfield)[i] & const_char[j];
			if(c1>0 && c2==0) return 1;
		}
	}
	
	j  = dst->valid_length % 8;
	c1 = dst->bitfield[dst->bitfield_length-1];
	c2 = src->bitfield[src->bitfield_length-1];
	for(i = 0; i < j; i++) {
		if( (c1&const_char[i])>0 && (c2&const_char[i])==0 )
			return 1;
	}
	
	return 0;
}
/*  
    以上函數(shù)的功能測試代碼如下:
	測試時可以交換map1.bitfield和map2.bitfield的值或賦其他值

	Bitmap map1, map2;
	unsigned char bf1[2] = { 0xa0, 0xa0 };
	unsigned char bf2[2] = { 0xe0, 0xe0 };
  
	map1.bitfield        = bf1;
	map1.bitfield_length = 2;
	map1.valid_length    = 11;
	map2.bitfield        = bf2;
	map2.bitfield_length = 2;
	map2.valid_length    = 11;
	  
    int ret = is_interested(&map1,&map2);	
	printf("%d\n",ret);
 */

// 獲取當前已下載到的總的piece數(shù)
int get_download_piece_num()
{
	unsigned char const_char[8] = { 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
	int           i, j;
	
	if(bitmap==NULL || bitmap->bitfield==NULL)  return 0;
	
	download_piece_num =0;

	for(i = 0; i < bitmap->bitfield_length-1; i++) {
		for(j = 0; j < 8; j++) {
			if( ((bitmap->bitfield)[i] & const_char[j]) != 0) 
				download_piece_num++;
		}
	}

	unsigned char c = (bitmap->bitfield)[i]; // c存放位圖最后一個字節(jié)
	j = bitmap->valid_length % 8;            // j是位圖最后一個字節(jié)的有效位數(shù)
	for(i = 0; i < j; i++) {
		if( (c & const_char[i]) !=0 ) download_piece_num++;
	}
		
	return download_piece_num;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜在线视频| 久久影视一区二区| 欧美电影免费观看完整版| 欧美国产日本韩| 视频在线在亚洲| www.66久久| 久久综合九色综合欧美就去吻| 亚洲欧洲精品一区二区精品久久久 | 欧美性大战久久久久久久| 26uuu另类欧美亚洲曰本| 亚洲一卡二卡三卡四卡无卡久久| 国产精品99精品久久免费| 91麻豆精品久久久久蜜臀| 亚洲精品国产精品乱码不99| 国产成人综合自拍| 日韩手机在线导航| 日日噜噜夜夜狠狠视频欧美人| 99九九99九九九视频精品| 久久久亚洲高清| 全部av―极品视觉盛宴亚洲| 欧美日韩大陆在线| 亚洲一区二区三区四区在线观看 | 成人免费精品视频| 26uuu精品一区二区在线观看| 爽好久久久欧美精品| 6080yy午夜一二三区久久| 亚洲自拍偷拍图区| 在线观看区一区二| 一区二区三区在线影院| yourporn久久国产精品| |精品福利一区二区三区| 成人免费看片app下载| 中文字幕欧美日本乱码一线二线| 国精产品一区一区三区mba视频 | 天涯成人国产亚洲精品一区av| 色就色 综合激情| 一区二区三区中文字幕精品精品| av激情成人网| 夜夜嗨av一区二区三区四季av| 色婷婷国产精品| 婷婷成人激情在线网| 91精品国产综合久久久久久久久久| 天天av天天翘天天综合网色鬼国产 | 欧美老肥妇做.爰bbww视频| 天天综合色天天综合| 91麻豆精品久久久久蜜臀| 久久国产成人午夜av影院| www欧美成人18+| 成人av网站大全| 亚洲高清视频在线| 精品久久久久久久人人人人传媒 | 2019国产精品| 国产成a人亚洲精| 一区二区三区资源| 日韩精品一区二区三区视频在线观看| 狠狠色2019综合网| 亚洲人精品午夜| 日韩三级免费观看| 高潮精品一区videoshd| 亚洲精品videosex极品| 欧美三级在线看| 国产乱码精品一区二区三区av | 成人激情电影免费在线观看| 亚洲少妇最新在线视频| 9191国产精品| bt欧美亚洲午夜电影天堂| 亚洲高清免费视频| 久久久久国产免费免费| 欧美在线你懂得| 国产盗摄一区二区三区| 亚洲综合免费观看高清完整版在线 | 99热99精品| 视频一区在线播放| 国产精品久久777777| 777久久久精品| av动漫一区二区| 久久99精品久久久久婷婷| 亚洲免费av高清| 2020国产成人综合网| 欧美日韩精品一区二区三区四区| 国产又粗又猛又爽又黄91精品| 亚洲精品videosex极品| 欧美精品一区二区三区蜜桃| 在线观看精品一区| 国产精品91一区二区| 五月天欧美精品| 一区二区三区在线观看网站| 久久人人爽爽爽人久久久| 欧美喷潮久久久xxxxx| av一区二区三区在线| 精品一区二区三区蜜桃| 日韩精品一二三四| 一区二区国产视频| 国产精品美女一区二区在线观看| 欧美一级国产精品| 69精品人人人人| 精品视频在线看| 欧美亚洲综合久久| 一本一道波多野结衣一区二区| 国产精品综合久久| 精品中文字幕一区二区小辣椒| 亚洲h在线观看| 亚洲国产精品久久人人爱蜜臀| 亚洲欧美日本在线| 亚洲欧美中日韩| 中文字幕中文字幕在线一区| 久久久精品综合| 久久久国产午夜精品| 欧美成人女星排行榜| 欧美一区二区三区爱爱| 91麻豆精品国产自产在线观看一区| 欧美影院精品一区| 欧美亚洲一区二区三区四区| 色一情一乱一乱一91av| 97精品视频在线观看自产线路二 | 精品一区二区在线免费观看| 日本欧美韩国一区三区| 日韩电影在线免费看| 五月天婷婷综合| 裸体歌舞表演一区二区| 久久国产精品99久久人人澡| 国内成人精品2018免费看| 国产精品一级在线| 成人禁用看黄a在线| 色综合久久精品| 欧美综合一区二区| 欧美精品久久99久久在免费线 | 性做久久久久久| 香蕉久久一区二区不卡无毒影院 | 欧美三级视频在线观看| 在线电影国产精品| 欧美成va人片在线观看| 久久久噜噜噜久久人人看 | 精品少妇一区二区三区日产乱码 | 国产精品灌醉下药二区| 亚洲同性gay激情无套| 亚洲综合免费观看高清完整版在线 | 久久99九九99精品| 国产91综合一区在线观看| 99精品视频免费在线观看| 欧美日韩黄色一区二区| 日韩一二在线观看| 国产精品黄色在线观看| 亚洲一级在线观看| 国产麻豆精品视频| 色综合久久久久久久久久久| 欧美精品v国产精品v日韩精品| 久久人人爽人人爽| 一区二区三区日韩欧美精品| 免费美女久久99| av网站一区二区三区| 91精品国产综合久久精品| 亚洲国产精品成人综合色在线婷婷| 亚洲人精品一区| 精品综合免费视频观看| 日本久久精品电影| 久久麻豆一区二区| 亚洲一区自拍偷拍| 懂色av一区二区夜夜嗨| 678五月天丁香亚洲综合网| 中文字幕中文字幕在线一区| 蜜臀久久久99精品久久久久久| 成人小视频免费观看| 欧美一三区三区四区免费在线看| 国产精品不卡在线观看| 卡一卡二国产精品| 欧美网站一区二区| 中文字幕一区三区| 国产一区二区三区免费看| 欧美自拍偷拍午夜视频| 中文av一区特黄| 九色综合狠狠综合久久| 欧美猛男超大videosgay| 国产精品免费免费| 国产精品一区二区你懂的| 欧美一区二区视频在线观看2022| 亚洲日本中文字幕区| 国产精品一区二区91| 欧美电影免费提供在线观看| 亚洲va韩国va欧美va精品| 91色.com| 综合久久一区二区三区| 国产成人精品一区二| 久久亚洲欧美国产精品乐播| 日本午夜一区二区| 欧美美女一区二区在线观看| 亚洲免费高清视频在线| 成人精品在线视频观看| 久久久www成人免费毛片麻豆| 蜜芽一区二区三区| 日韩一区二区三区高清免费看看| 亚洲午夜精品一区二区三区他趣| 99re视频精品| 亚洲色大成网站www久久九九| a美女胸又www黄视频久久| 欧美国产一区在线| 成人免费毛片aaaaa**| 国产精品麻豆欧美日韩ww| 成人一级片网址| 成人欧美一区二区三区在线播放|