以下の内容のファイルにwcコマンドを実行すると、文字数は30文字になります。ファイルの終わり文字は含まれていますか?スペースと改行を含めると、29文字しかありません。
Hello World
Again Hello World
出力は
2 5 30 test
UnixまたはLinuxファイルシステムにはファイルの終わり文字はありません。使用中のファイル記述子が通常のファイルを参照している場合、read()
システムコールはファイルの終わりの条件で0を返します。 read()
は、ソケットとパイプで異なる動作をします。ファイルの終わりを示す特別な文字はありません。
wc
は、最初の行に行末をカウントする12文字(ASCII改行、数値的に0x0a)があり、2行目にも改行(別名)をカウントする18文字があるため、文字数またはバイト数として30を与えました。改行)。
この場合、_ls -l
_を使用して文字数を再確認できます。また、hexdump
またはxxd
がある場合は、0x0a値の改行を示す16進数の出力を取得できます。
C標準ライブラリ関数fgetc()
は、ファイルの終わりで-1を返しますが、これは、Unix(またはLinux)またはread()
システムコールではなく、ライブラリコードで行われます。
ファイルのバイト数です。 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