回答編集履歴
1
追記
answer
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
質問の背景は何でしょうか?
|
2
2
|
`EOF`は、ファイルの終わりと言うことで、読むべきデータがもう無いと言うことです。つまりデータはありません。
|
3
3
|
C等では、`EOF`をプログラム上でデータで扱いたいというニーズのために、「ファイル中に絶対に存在しない値」として、`-1`を使っています。
|
4
|
-
他の言語ではまた別の手段で`EOF`を判断します。
|
4
|
+
他の言語ではまた別の手段で`EOF`を判断します。
|
5
|
+
|
6
|
+
#追記
|
7
|
+
歴史的なCP/M等の0001 1010 = 0x1A = SUB(substitute)については、ikedasさんの書かれている通りで、EOFというわけでは無いです。ファイルサイズがちょうど128の整数倍のファイルだと0x1Aは付きませんので、「0x1Aが出てくるまで読む」というプログラムはバグと言うことです。
|
8
|
+
|
9
|
+
Unix/LinuxのCtrl-D = 0000 0100 = EOT(End of Transmission)は、EOTの名前の通り、直ちにデータを送ります。行頭でCtrl-Dを打つと、`read`システムコールが戻り値`0`つまり「長さゼロのデータが読めた」と返ります。これはディスクファイルが`EOF`に達したときと同じ戻り値ですが、Unix/Linuxの場合は端末もファイルの一種なので、`read`が戻り値`0`の場合は`EOF`と見なすようコーディングします。`getchar`関数などはシステムコールに一皮かぶせてあるので、下請けの`read`が`0`を返したら`-1`を返すようになっています。
|
10
|
+
つまりシステムコールレベルでは、「`read`の戻り値が`0`」というのが`EOF`です。
|