资源简介

linux C 编程实战PDF+源代码

资源截图

代码片段和文件信息

#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; // 当前已下载的piece数 

// 如果存在一个位图文件则读位图文件并把获取的内容保存到bitmap
// 如此一来就可以实现断点续传即上次下载的内容不至于丢失
int create_bitfield()
{
bitmap = (Bitmap *)malloc(sizeof(Bitmap));
if(bitmap == NULL) { 
printf(“allocate memory for bitmap fiailed\n“); 
return -1;
}

// pieces_length除以20即为总的piece数
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 < 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 *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 < bitmap->bitfield_length; i++) {
printf(“%.2X “bitmap->bitfield[i]);
if( (i+1) % 16 == 0)  printf(“\n“);
}
printf(“\n“);

return 0;
}

int 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-04-06 13:02  Linux下C编程_源代码\
     目录           0  2010-04-06 13:02  Linux下C编程_源代码\源代码_BT下载程序\
     文件         310  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\Makefile
     文件        5422  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\bitfield.c
     文件        1111  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\bitfield.h
     文件         223  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\bterror.c
     文件         925  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\bterror.h
     文件       27176  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\data.c
     文件        2779  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\data.h
     文件         698  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\log.c
     文件         245  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\log.h
     文件        1258  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\main.c
     文件       23106  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\message.c
     文件        1460  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\message.h
     文件       11606  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\parse_metafile.c
     文件        1369  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\parse_metafile.h
     文件        4230  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\peer.c
     文件        3455  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\peer.h
     文件       15738  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\policy.c
     文件        1155  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\policy.h
     文件        5443  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\sha1.c
     文件         996  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\sha1.h
     文件        1363  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\signal_hander.c
     文件         224  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\signal_hander.h
     文件       13921  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\torrent.c
     文件         327  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\torrent.h
     文件       11458  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\tracker.c
     文件        1556  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\tracker.h
     文件      227011  2008-01-23 17:53  Linux下C编程_源代码\源代码_BT下载程序\ttorrent
     文件        1305  2008-01-23 17:53  Linux下C编程_源代码\程序使用说明.txt
     目录           0  2010-04-06 13:02  Linux下C编程_源代码\第10章\
............此处省略308个文件信息

评论

共有 条评论