Unix wc 命令中的字符计数

Unix wc 命令中的字符计数

当我对包含以下内容的文件发出 wc 命令时,它给出的字符数为 30。它是否包括文件结尾字符?由于包括空格和换行符,因此只有 29 个字符。

Hello World
Again Hello World

输出是

2  5 30 test

答案1

Unix 或 Linux 文件系统中没有文件结束符。如果使用的文件描述符引用常规文件,则系统read()调用在文件结束条件下返回 0。 read()在套接字和管道上的工作方式不同。您没有获得特殊字符来标记文件结尾。

wc给你 30 作为字符或字节计数,因为第一行有 12 个字符计算行尾(ASCII 换行符,数字为 0x0a),第二行有 18 个字符,也计算换行符(又名换行符)。

在这种情况下,您可以使用 来仔细检查字符数ls -l,如果您有hexdumpxxd可以获得十六进制打印输出,显示 0x0a 值的换行符。

C 标准库函数fgetc()确实在文件末尾返回 -1,但这是在库代码中完成的,而不是通过 Unix(或 Linux)或系统read()调用完成的。

答案2

它是文件中的字节数。请参阅手册页。

这是一个 5 字节的示例:

$ echo 1234 > foo.txt
$ od -ta foo.txt
0000000   1   2   3   4  nl
0000005
$ ls -l foo.txt
-rw-r--r-- 1 tim None 5 Feb 27 21:26 foo.txt
$ wc foo.txt
1 1 5 foo.txt

现在添加一个空行:

$ echo >> foo.txt
$ ls -l foo.txt
-rw-r--r-- 1 tim None 6 Feb 27 21:29 foo.txt
$ wc foo.txt
2 1 6 foo.txt

相关内容