coreutils4.5.1源码阅读读后感20200905

coreutils4.5.1源码阅读读后感20200905
先把源码的长度进行排序,
wc -l *.c | sort -n > source.txt
并写到一个文件中,如图:
      2 ls-dir.c
      2 ls-ls.c
      2 ls-vdir.c
      7 md5.c
      7 sha1sum.c
     71 false.c
     71 true.c
     74 sync.c
     82 pwd.c
读代码时,打开这个文件,从长度最小的依次向下读。当读不下去时,就又从头开始读。个人感觉coreutils4.5的源码还是适合入门的。因为基本上一个程序就对应一个源码。可以进行修改。当堂可以看到效果。我比较喜欢数学类操作,对文件类操作不太熟悉,但感觉作者对文件操作非常熟悉。举个例子。
  ./yes
  输出是:
y
y
y
.....
其程序逻辑如下:
      处理输出的逻辑是:
      while (1)
    {
      int i;
      for (i = 0; i < UNROLL; i++)
        puts ("y");
      if (ferror (stdout))
        break;
    }
当时我就想,为什么不直接写一个循环呢?为什么要弄两个循环呢?后来想,也许作者是怕输出缓冲区溢出吧。
像comm.c中,作者读入一行,是用到了如下结构:
  /* thisline[i] points to the linebuffer holding the next available line
     in file i, or is NULL if there are no lines left in that file.  */
  struct linebuffer *thisline[2];

  /* streams[i] holds the input stream for file i.  */
  FILE *streams[2];
因此,真是能学到不少的知识。
我读代码是瞎看的。因为我总想知道核心的处理逻辑,知道了核心的处理,我就不迷信了,知道了程序不是魔法了。而是用我也知道的朴素逻辑弄出来的。因此,我读代码很快,如果我找不到核心逻辑,也许我就会放弃这个程序,再找下一个程序来读。就好像记单词一样,每次都记大量的单词。通过大量重复来增强记忆。
今天又从头看到了fold.c。也许要休息一下了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值