
以下を含むファイルに対してwcコマンドを実行すると、30個の文字数が表示されます。ファイル終了文字が含まれていますか?スペースと改行を含めると、29文字だけが可能です。
Hello World
Again Hello World
出力は次のとおりです
2 5 30 test
答え1
Unix または Linux ファイルシステムにはファイルの終わり文字はありません。使用されたファイル記述子が通常のファイルを参照すると、システムread()
コールはファイル終了条件で0を返します。 read()
ソケットとパイプでは異なる動作をします。ファイルの終わりを示す特殊文字はありません。
wc
最初の行には行末(ASCII改行、数字は0x0a)を数える12文字があり、2行目には改行(別名改行)を数える18文字があるため、文字またはバイト数で30を提供します。
この場合、改行文字の0x0a値を表示する16進印刷出力がls -l
あるか、または取得できる場合はhexdump
文字数を再確認するために使用できます。xxd
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