-
大小: 8.6MB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2023-08-21
- 語言: 其他
- 標(biāo)簽:
資源簡介
一個Linux下的BT下載客戶端的完整實現(xiàn),包含源代碼,和軟件開發(fā)的詳細(xì)講解,包含BT算法,網(wǎng)路通信的具體實現(xiàn)等等。。是學(xué)習(xí)Linux下C編程的好資料,其中包含完整的工程代碼,和Makefile文件

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“parse_metafile.h“
#include?“bitfield.h“
extern?int??pieces_length;
extern?char?*file_name;
Bitmap??????*bitmap?=?NULL;?????????//?指向位圖
int?????????download_piece_num?=?0;?//?當(dāng)前已下載的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(fp0SEEK_SET);
for(i?=?0;?i?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?*bitmapint?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?*bitmapint?indexunsigned?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->bitfield0bitmap->bitfield_length);
return?0;
}
?
int?all_set(Bitmap?*bitmap)
{
if(bitmap->bitfield?==?NULL)??return?-1;
memset(bitmap->bitfield0xffbitmap->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?bitfield_length;?i++)?{
printf(“%.2X?“bitmap->bitfield[i]);
if(?(i+1)?%?16?==?0)??printf(“\n“);
}
printf(“\n“);
return?0;
}
int?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2010-11-24?00:21??Linux下C編程_源代碼\
?????文件?????1736192??2010-09-27?09:08??Linux下C編程_源代碼\BT軟件下載開發(fā)完整版-00.doc
?????文件?????1602048??2010-09-27?09:08??Linux下C編程_源代碼\BT軟件下載開發(fā)完整版-01.doc
?????目錄???????????0??2010-11-23?22:17??Linux下C編程_源代碼\Linux下C編程_源代碼\
?????目錄???????????0??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\
?????文件????????5422??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\bitfield.c
?????文件????????1111??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\bitfield.h
?????文件?????????223??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\bterror.c
?????文件?????????925??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\bterror.h
?????文件???????27176??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\data.c
?????文件????????2779??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\data.h
?????文件?????????698??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\log.c
?????文件?????????245??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\log.h
?????文件????????1258??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\main.c
?????文件?????????310??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\Makefile
?????文件???????23106??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\message.c
?????文件????????1460??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\message.h
?????文件???????11606??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\parse_me
?????文件????????1369??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\parse_me
?????文件????????4230??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\peer.c
?????文件????????3455??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\peer.h
?????文件???????15738??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\policy.c
?????文件????????1155??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\policy.h
?????文件????????5443??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\sha1.c
?????文件?????????996??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\sha1.h
?????文件????????1363??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\signal_hander.c
?????文件?????????224??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\signal_hander.h
?????文件???????13921??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\torrent.c
?????文件?????????327??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\torrent.h
?????文件???????11458??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\tracker.c
?????文件????????1556??2010-09-27?09:08??Linux下C編程_源代碼\Linux下C編程_源代碼\源代碼_BT下載程序\tracker.h
............此處省略314個文件信息
- 上一篇:慣性導(dǎo)航秦永元編著
- 下一篇:STM32串口中斷接收HAL庫
評論
共有 條評論