rsync源码分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
rsync源码分析

我从官网/pub/rsync/src/上,下载来第一个版本(0.1)的rsync源码开始研究。以下内容,作为我研究过程中的一些记录,方便自己的同时希望也能对于想要研究rsync的同仁有些帮助。 简介:rsync目前是用在Linux主机上,解决文件同步过程中一些效率问题的的方案。确切地说,是为了能在同步过程中,对两个主机之间相同、相似文件做到小量数据的传递,以提高同步效率、减轻对网络的压力。这样,就需要有一类算法,来确定两个文件的相似度、相似块。 版本号:0.1 在该版本中有七个源文件,分别是checksum.c(对hash算法强校验和弱校验的实现)、flist.c(处理文件、文目录、链接等)、main.c(入口源文件,处理命令行参数、功能分发)、match.c(checksum匹配相关功能)、md4.c(md4算法实现)、rsync.c(主要功能)、util.c(工具类函数)。 各个源文件的代码量: 78 ??256 ?1811 checksum.c ??380 ??856 ?8536 flist.c ??590 ?1331 12218 main.c ??213 ??608 ?4839 match.c ??263 ?1624 ?8470 md4.c ??585 ?1361 12675 rsync.c ??184 ??469 ?3586 util.c ?2293 ?6505 52135 总用量 从代码量看来,第一个版本的rsync还是功能比较简单的。 有五个头文件,分别是:byteorder.h、md4.h、proto.h、rsync.h、version.h(记录项目版本号)。 各个头文件的代码量: ??54 ?227 1875 byteorder.h ??49 ?244 1610 md4.h ??28 ?131 1221 proto.h ?209 ?524 3933 rsync.h 1 ???3 ??22 version.h ?341 1129 8661 总用量 到目前为止,我们可以看到,主要的代码量集中在以同名(rsync)源文件、头文件中。与大部分Linux下的项目一致。 为了能够更容易地看明白整个项目的架构、流程,首先需要搞明白其中使用到的一些函数: void qsort void *base, size_t nmemb, size_t size, int *compar const void *, const void* ; 该函数是Linux下,用于对数组自定义(compar)排序,可以通过命令行man qsort查看具体说明,以及example。 char *strchar const char *s, int c ; 该函数是Linux下,返回字符串s中,c出现的位置。 char *strdup const char *s ; 该函数是Linux下,用来复制一个新的字符串。 char *strtok char *str, constr char *delim ; 该函数是Linux 下,用来切分字符串的。 void bcopy const void *src, void *dest, size_t n ; 该函数是Linux下,用于复制字节的。 pit_t waitpid pit_t pid, int *status, int options ; 该函数是Linux下,用于等待指定进程结束的。 总结:这个版本的rsync中用到了信号、进程、管道等,结构相对比较简单。有很多malloc分配的堆内存,我个人感觉不是很好。另外,也没有看到该版本中哪一块的代码是用来创建socket(或者还没有实现与其他机器的同步)的。 主要实现了参数解析、功能分发,文件hash值计算、比较,交互通信。 版本号:0.2 从这个版本开始,rsync项目源码中,多了一个lib目录。 源文件代码分布: 78 ??256 ?1811 checksum.c ??188 ??468 ?3993 exclude.c ??386 ??864 ?8743 flist.c ??677 ?1564 14750 main.c ??213 ??608 ?4839 match.c ??263 ?1624 ?8470 md4.c ??585 ?1361 12675 rsync.c ??184 ??469 ?3586 util.c ?2574 ?7214 58867 总用量 比上一个版本多了exclude.c文件(共八个源文件),从 总量上来说,变化不大。 头文件代码分布: ??54 ?227 1875 byteorder.h ??49 ?244 1610 md4.h ??35 ?155 1523 proto.h ?222 ?540 4096 rsync.h 1 ?

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档