Answers:
它读取整个文件并计算行尾数。计算行尾真的很便宜;大部分时间都花在读取文件上。如果文件碰巧(主要是)在缓冲区缓存中,那也将很便宜。否则,将取决于文件存储的速度。
换句话说,没有魔术。
WC只是以原始字节的块读取文件(最好是文件所在的基础文件系统的自然块大小的倍数)。
然后,它只扫描缓冲区,计算行尾字符。(它还计算空格,制表符,换页符和其他特殊字符,以防万一您需要除-l输出之外的其他信息。)
从磁盘读取是速度方面最昂贵的部分。与之相比,缓冲区的扫描花费的时间可以忽略不计。
假设您有9000万行,平均每行100个字符。
那是大约9.000.000.000个字符或大约860 MB。
带有SATA-3Gb / s驱动器的体面的PC将在10秒内完成此操作。即使在相对较慢的文件系统上,同时又有其他活动在进行。
具有某些性能调整和优化的文件系统的快速计算机可以在5秒内完成此操作,即使无需诉诸SATA-6G和SSD驱动器。
\n
)字符-“ -l,--lines打印换行符\ n \”-摘自wc.c
wc -l
..抱歉的问题……
欢迎来到自由软件的世界。您可以随时查看源代码
尽管我必须承认我不是C程序员,所以我不是一个真正可以为您解释代码的人(我自己会感到困惑)。
我知道的是,由于wc不会打开文件本身,而是要求操作系统执行此操作,因此这在很大程度上取决于操作系统,当然还取决于文件的存储方式。除此之外,我希望必须有正确的编程习惯,例如不要尝试一次读取整个文件,等等。