回答編集履歴

1

追記

2016/10/18 13:26

投稿

otn
otn

スコア84576

test CHANGED
@@ -5,3 +5,15 @@
5
5
  C等では、`EOF`をプログラム上でデータで扱いたいというニーズのために、「ファイル中に絶対に存在しない値」として、`-1`を使っています。
6
6
 
7
7
  他の言語ではまた別の手段で`EOF`を判断します。
8
+
9
+
10
+
11
+ #追記
12
+
13
+ 歴史的なCP/M等の0001 1010 = 0x1A = SUB(substitute)については、ikedasさんの書かれている通りで、EOFというわけでは無いです。ファイルサイズがちょうど128の整数倍のファイルだと0x1Aは付きませんので、「0x1Aが出てくるまで読む」というプログラムはバグと言うことです。
14
+
15
+
16
+
17
+ 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`を返すようになっています。
18
+
19
+ つまりシステムコールレベルでは、「`read`の戻り値が`0`」というのが`EOF`です。