网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月27日漏签0天
linux吧 关注:550,656贴子:2,580,357
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 14回复贴,共1页
<<返回linux吧
>0< 加载中...

C++程序帝现身吧 这个代码来讲解一下。

  • 只看楼主
  • 收藏

  • 回复
  • 府梦泽0kD
  • -------x
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1 /*
2 * fixed-sized file chunking
3 */
4 static int file_chunk_fsp(int fd, int fd_ldata, int fd_bdata, unsigned int *pos, unsigned int *block_num,
5 block_id_t **metadata, hashtable *htable, char *last_block_buf, unsigned int *last_block_len)
6 {
7 int ret = 0;
8 unsigned int rwsize;
9 unsigned char md5_checksum[16 + 1] = {0};
10 char *buf = NULL;
11
12 buf = (char *)malloc(g_block_size);
13 if (buf == NULL)
14 {
15 perror("malloc in file_chunk_fsp");
16 return errno;
17 }
18
19 while (rwsize = read(fd, buf, g_block_size))
20 {
21 /* if the last block */
22 if (rwsize != g_block_size)
23 break;
24
25 /* calculate md5 */
26 md5(buf, rwsize, md5_checksum);
27 if (0 != (ret = dedup_regfile_block_process(buf, rwsize, md5_checksum, fd_ldata,
28 fd_bdata, pos, block_num, metadata, htable)))
29 {
30 perror("dedup_regfile_block_process in file_chunk_fsp");
31 goto _FILE_CHUNK_FSP_EXIT;
32 }
33 }
34 *last_block_len = (rwsize > 0) ? rwsize : 0;
35 if ((*last_block_len)) memcpy(last_block_buf, buf, *last_block_len);
36
37 _FILE_CHUNK_FSP_EXIT:
38 if (buf) free(buf);
39 return ret;
40 }


  • mabole0130
  • ----x-wx
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
明明是C Lang。。。
这是。。。GIO?


2026-09-27 11:54:44
广告
不感兴趣
开通SVIP免广告
  • 乐正铃子
  • ----xr-x
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
只会JAVA和C# C++自学时没到这,,,,,,,
    ------来自 For YSTYLE.Tk 程序员是值得尊敬的,程序员的双手是魔术师的双手。他们把枯燥无味的代码变成了丰富多彩的软件……


  • 零家捣蛋精灵
  • ----xrw-
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个函数实现文件fd中按g_block_size大小读取数据并进行md5校验计算,dedup_regfile_block_process这个函数效果不明,但是通过该函数的返回值如果不等于0,该返回值作为整个函数的返回值返回,并且参数中没有有效的返回结果,如果每次校验dedup_regfile_block_process函数都返回0,则读取全部文件中的数据,并对最后一次读取的小于g_block_size大小的数据块的长度和内容通过参数last_block_len和last_block_buf返回,整个函数的返回值为0


  • 府梦泽0kD
  • -------x
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
static int dedup_regfile_block_process(char *block_buf, unsigned int block_len, char *md5_checksum, int fd_ldata, int fd_bdata, unsigned int *pos, unsigned int *block_num, block_id_t **metadata, hashtable *htable){dedup_logic_block_entry dedup_lblock_entry;unsigned int cbindex;int bflag = 0;unsigned int *bindex = (block_id_t *)hash_value((void *)md5_checksum, htable);
/* the block exists */if (bindex != NULL){int i;for (i = 0; i < *bindex; i++){if (0 == block_cmp(block_buf, fd_ldata, fd_bdata, *(bindex + i + 1), block_len)){cbindex = *(bindex + i + 1);bflag = 1;break;}}} @零家捣蛋精灵 我找到了那个函数代码 你能帮忙看一下么??


  • 零家捣蛋精灵
  • ----xrw-
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你奶奶的~让我炼眼啊...该函数继续调用hash_value函数确定本块数据的校验是否在htable中,如果没找到,说明不是数据重复块,返回bflag=0,对应外层函数,将继续执行文件数据的读取,重复这次操作。如果md5在htable中存在,bindex不为空,将继续进行块内容比较,该块确实不存在,还是返回0否则bflag=1,并返回bflag,你的代码好像少了个return bflag;???


  • 零家捣蛋精灵
  • ----xrw-
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
19 while (rwsize = read(fd, buf, g_block_size))
20 { ....
}就是这里
每次准备读取的固定大小就是g_block_size,rwsize是实际读取的字节数


  • 六把狂战
  • ----x---
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
读程序是必备的技能
自己慢慢看去


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 14回复贴,共1页
<<返回linux吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示