回答編集履歴
1
追記
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`です。
|