web-dev-qa-db-ja.com

Unixwcコマンドの文字数

以下の内容のファイルにwcコマンドを実行すると、文字数は30文字になります。ファイルの終わり文字は含まれていますか?スペースと改行を含めると、29文字しかありません。

Hello World
Again Hello World

出力は

2  5 30 test
6
user3539

UnixまたはLinuxファイルシステムにはファイルの終わり文字はありません。使用中のファイル記述子が通常のファイルを参照している場合、read()システムコールはファイルの終わりの条件で0を返します。 read()は、ソケットとパイプで異なる動作をします。ファイルの終わりを示す特別な文字はありません。

wcは、最初の行に行末をカウントする12文字(ASCII改行、数値的に0x0a)があり、2行目にも改行(別名)をカウントする18文字があるため、文字数またはバイト数として30を与えました。改行)。

この場合、_ls -l_を使用して文字数を再確認できます。また、hexdumpまたはxxdがある場合は、0x0a値の改行を示す16進数の出力を取得できます。

C標準ライブラリ関数fgetc()は、ファイルの終わりで-1を返しますが、これは、Unix(またはLinux)またはread()システムコールではなく、ライブラリコードで行われます。

8
Bruce Ediger

ファイルのバイト数です。 manページを参照してください。

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
1
Tim B