从头实现Linux指令(二)word counting

本文从零实现Linux指令系列文章,其他系列文章:

从头实现Linux指令(零)序言

从头实现Linux指令(一)实现自己的shell

从头实现Linux指令(一续)实现自己的shell代码解析

从头实现Linux指令(二)word counting

文章目录

    • 主逻辑
      • OK
    • 互相交流

linux好用就好用在在shell上有太多使用的小工具了。比如能够详细统计文件内容的tokei就是其中之一。堪称程序员神奇,对文件的语言代码以及注释,都可以给一个数据统计。如下图:
从头实现Linux指令(二)word counting_第1张图片
不过我们今天的主角并不是tokei,而是一个更简单的小工具,叫wc指令,wc用法如下:

wc file.txt
1068 356 100

wc接收一个参数,就是文件名,它可以计算包含在文件中的字符、单词和行数。这里咱们假设

  1. 每个字符都是用ASCII编码的
  2. 把一个单词看作是空格之间的任意字符串
  3. 一行的转义字符序列为\n

话不多少,一起来看代码实现吧。

主逻辑

整个代码都很简单,总共55行,在这里学习到的系统调用主要还是文件相关的内容:fopen, fclose, fgetc。我们需要意识到每一个文件都是由二进制组成的,如果把一个文件当作文本文件,一般来说是某个代码文件,那么,可以一个字节一个字节地去读相应的字符,对应于文件中你所看到的ascii码。之后再判断是否是换行符空格符,来统计行数和单词数了。
while部分的判断是本代码的核心。

while((c = fgetc(f)) != EOF) {
            if(c == '\n') {
                lines++;
                if(word_ev > 0) {
                    words++;
                    word_ev = 0;
                }
            } else if(c == ' ') {
                if(word_ev > 0) {
                    words++;
                    word_ev = 0;
                }
            } else {
                word_ev++;
            }
            bytes++;
        }

OK

好了,上次所介绍的shell指令一次性实现了多条指令,看起来比较困难,但却是整个linux指令的核心,所以也正好学些其他简单的指令放松放松了~

互相交流

读者你好!如果你对本文内容感兴趣,我十分希望能够和你互相学习,可以扫码和我联系!一起进步

在这里插入图片描述

你可能感兴趣的:(Linux,shell,solution,assignmnet,wc,实现)