美文网首页
linux中wc是怎么实现的

linux中wc是怎么实现的

作者: HHMC | 来源:发表于2017-04-25 15:34 被阅读0次

为什么会写这篇文章

Unix中很多地方都涉及到文本处理,经常会涉及到 line , word , sentence , paragraph 等概念。而这里面就涉及到一些含义,但是这些含义好像是模糊不清的,所以写了这篇文章。

wc中 line 和 character

wc程序完成 line word character计数,但是什么是line,什么是character,什么又是word

首先说 line 和 character:
在stackoverflow中有这样一个问题:why should text files end with a newline?中有提到POSIX定义了line为

A sequence of zero or more non- <newline> characters plus a terminating <newline> character.

然后出现了一个有意思的现象
所以在linux中touch 一个新文件,然后使用wc程序,显示 lines=0, characters=0;
然后使用vi打开文件,使用 i 进入 insertmode,然后输入一个字符,然后 :wq,然后使用wc程序,显示lines=1 character=2。
产生这个现象的原因就是文件末尾会自动添加一个newline character。

wc 中 word :

在Google中搜寻 wc source code,然后发现了两个比较有意思的搜索结果:

  1. https://www.gnu.org/software/cflow/manual/html_node/Source-of-wc-command.html#Source-of-wc-command
  2. http://code.metager.de/source/xref/gnu/coreutils/src/wc.c

第一个是GNU cflow项目中的一个demo程序,比较简单,但是有点小遗憾,里面功能实现不全,而且使用gcc编译还有warning。
第二个是看网页上xref可以知道在GNU CoreUtils网站中下载压缩包,然后在压缩包里面找到src/wc.c。

先分析一下第一个中的代码

···
int main (int argc, char **argv)
{
int i;
if (argc < 2)
errf ("usage: wc FILE [FILE...]");

for (i = 1; i < argc; i++)
    counter (argv[i]);

if (argc > 2)
    report ("total", total_ccount, total_wcount, total_lcount);
return 0;

}
···
main中实现了主要功能,调用了数一个文件中有多少lines,words,characters的函数count

然后比较关键的代码是getword函数,不停的从file stream中得到words
其中COUNT完成lines和characters计数,getword函数完成words计数功能。

这个代码对word计数与linux中wc计数不同,我认为主要原因是
这段代码只将连续的字母作为一个字,连续的数字等不作为word
isword用来判断当前字符是否处于一个字,isword实现的功能不完善

再来分析第二个代码

第二个代码相对就有700行之多,先挖个坑,以后学习点内核知识 再来填 coreutils的坑

相关文章

  • linux中wc是怎么实现的

    为什么会写这篇文章 Unix中很多地方都涉及到文本处理,经常会涉及到 line , word , sentence...

  • Linux常用命令

    Linux中wc命令用法 Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、...

  • 2018-04-10

    Linux wc命令 Linux wc命令用于计算字数。 利用wc指令我们可以计算文件的Byte数、字数、或是列数...

  • linux 获取文件的行数

    需求: linux下获取某文件的总行数 实现: 方案一: echo `cat logfile.txt | wc -...

  • linux: wc

    wc基本使用 Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统...

  • 文本内容查看

    cat more less diff/colordiff wc 使用linux总会有这种感觉,用起来怎么那么舒服呢...

  • Linux命令学习之:wc命令

    Linux命令学习之:wc命令 统计文件里面有多少单词,多少行,多少字符。 wc语法 默认使用wc统计/etc/p...

  • linux命令 - wc

    功能 word, line, character, and byte count单词数,行数,字符数和字节数统计 ...

  • Linux命令--wc

    一、 命令简介:   wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,并将统计结...

  • Linux命令--wc

    what?Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结...

网友评论

      本文标题:linux中wc是怎么实现的

      本文链接:https://www.haomeiwen.com/subject/gzyvzttx.html