gnu coreutils-4.5.1 head.c代码分析2


昨天看了一本介绍对发明awk语言的三位的采访,其中讲到正则表达式的实现算法的详细解释在龙书中有介绍,我的龙书放在家里了,于是拿起《算法导论》翻,其中找到正则表达式字符串查找的一章,DFA知道概念,但看算法就糊涂了。看来,还是要慢慢看编译原理的。
我的道行太浅了,读awk的代码,还是有难度。虽然可以照着书,把bison的例子敲两遍,但要理解算法,还是嫩了。
作者说,他们第一版awk才3000多行,最新版也就6000行,看来,我读最新版本也行,因为最初版,编译太麻烦了。
我尝到了对coreutils-4.5.1编译的甜头了,能编译通过,再修改,再编译,再执行看效果,太美好了。我才懒得自己写gcc呢,直接进行src目录,make一下,就出来结果了。太美妙了。
今天就随着翻翻,又看到了head.c
那些涉及高深算法的代码读不了,但这些没有高深算法,很有意思。
程序总体思路是:
./head -c 按字节计算
./head -n 按行数计算
程序用一个变量做标志,区分到底是按行还是按字节显示。
按字节显示就调用:
head_bytes
按行显示就调用 :
head_lines
按字节显示,基本看懂了,
读字符,
再写到标准输出
再从要读的目标字节量中扣出已经读的。
但head_lines,我想如果一共要读lines_to_write行,如果实现呢?因为读出来的字节不是按行读的,而是一股脑读BUFSIZE个字节,然后根据'\n'来区分行,这段我没弄明白。
不过,也不急,留个尾巴。
'

猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/80285824