文档详情

rsync源码分析.doc

发布:2017-06-03约2.32千字共3页下载文档
文本预览下载声明
我从官网/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 ?
显示全部
相似文档