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

107 篇文章 1 订阅
95 篇文章 1 订阅

昨天看了一本介绍对发明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'来区分行,这段我没弄明白。
不过,也不急,留个尾巴。
'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值