0
点赞
收藏
分享

微信扫一扫

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


文章目录

  • ​​主逻辑​​
  • ​​OK​​
  • ​​互相交流​​

linux好用就好用在在shell上有太多使用的小工具了。比如能够详细统计文件内容的​​tokei​​就是其中之一。堪称程序员神奇,对文件的语言代码以及注释,都可以给一个数据统计。如下图:

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


不过我们今天的主角并不是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指令(二)word counting_shell_02


举报

相关推荐

0 条评论