coreutils5.0 comm.c源码分析

coreutils5.0 comm.c源码分析
很久没有读代码了,双12为改善环境,网购了两个乐哥支架,把显示器弄得更人性化,于是又开始读源码。
这次,不太急了,因为我知道源码总是读不完的,而且读完源码后,再干什么呢?好象也还是读源码,那为什么不把心思放在当下,好好的享受一下读源码的乐趣呢。
而且,我原来读源码时,总是要拷一些代码出来,后来,发现意义不大,我要从宏观上理解代码,而一下拷出代码,也是让人陷到细节中,而读代码之初,更需要从宏观上了解代码的实现逻辑,为些,我想,不要拷代码,而且也不要太快的读完代码,也许读完后,再回顾一下,品味一下。也许更好
今天再读了comm.c这个程序。
这个程序的使用是要会的,我写了两个文件进行测试。
a.1
1
3
5
a.2内容
3
5
6
再进行测试
./comm a.1 a.2
./comm -1 a.1 a.2
./comm -2 a.1 a.2
./comm -3 a.1 a.2
弄清楚用法后。再看程序,用了三个变量
only_file_1,only_file_2,both
这三个变量,用于控制这一行是两个文件共有的,还是某个文件独有的。only_file_1=0表示不显示文件1独有的。
only_file_2=0表示不显示文件2独有的。
both=0表示不显示两个文件共有的。
在compare_file函数中进行文件的比较及打印操作,而在main中只是设置这三个标志。
总体来讲,comm程序在比较时,要求文件是已经排好顺序的,因为comm程序使用的是类似合并排序的技巧。
在数据结构一课中,讲过。大体思路如下:
如要合并两个数组
a=[1,3,5]
b=[3,5,6]
因为两个数组已经排好序了,因此设两个指针指向数组。
pa=a
pb=b
while(pa && pb){
  if (pa<=pb) pa插入,后移
  否则 pb插入,后移
}
while(pa)
  pa插入,后移
while(pb)
  pb插入,后移
反正大概是这样一个思路。

只不过,作者在比较两行时,使用的方法比较绕,要我说,把两行当成两个字符串,直接用字串比较函数strcmp不行吗?
反正看懂了,觉得漂亮,没看懂呢,晕。我呢,侧重于代码要实现的功能。没有细细的推敲。
最后函数writeline有些晕。
控制tab打印的程序有些晕。但总体程序已经有了把握,所有我就留个尾巴,等以后再看。
今天读代码时,读出声音来,发现能集中注意力。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值