'\r'がで0000 1010 で表現されるように
EOF にも対応するバイナリがあるのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
CP/MやMS-DOSでは、0001 1010 (Ctrl+Z) が用いられました。これらのオペレーティングシステム (MS-DOSではバージョン2.xまで) では、ファイルサイズをディスクのセクタ長 (128バイト) の倍数にしかできなかったので、内容がバイト単位の任意の長さで終わってしまうテキストデータの場合には「この直前でデータは終わり」という標識になるコードが必要だったのです。
Unix系では、0000 0100 (Ctrl+D) が、コンソールからの入力の終了として処理されます。これはシェルの機能で入力が終了させられるというだけで、実際にこのコードがプロセスに入力されるわけではありません。このコードは制御文字としてはend of transmission (伝送終了) を表すので、一応使い途としては正しそうです。
C標準関数のgetc(3)などは、入力終端に達したときにEOFというシンボルで定義される定数を返します。コンパイラが対応する環境で実際にファイルの終端を表すコードが存在するかどうかとは関係なく、そういう動作をしますし、EOFの定義値は符号付き整数の-1といった、ファイル中のバイトとしてはありえない値です。
回答後追記。ご質問にあるコードですが
"\r"は0000 1101です。"\n"が0000 1010です。
投稿2016/10/18 13:00
編集2016/10/18 13:20総合スコア4443
0
具体的なコードはCP/Mの場合0x1a(ASCII制御文字のSUB)だったが、処理系により異なる。CP/Mの影響を受けたシステムでは、これを付ける慣習が長く続いたが、ファイルサイズから終端がわかるシステムでは付けないことが多い。
https://ja.wikipedia.org/wiki/End_Of_File
何らかのプログラムがデータを1バイトずつ読んでいるときに、『こいつ(この1バイト)が現れたらファイルの終わりということにしよう』という決め事ですので、今となっては『使っているソフトによって異なる」ということだと思います。
Linux/UNIX でたとえば cat[Enter] で標準入力を待っている状態だと、Ctrl+d(0x04) の入力で EOF とみなしてコマンドを抜けたり、といった部分で残ってはいますが、今となってはほとんど気にしなくてもよいのではないでしょうか。
投稿2016/10/18 12:54
総合スコア1615
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
質問の背景は何でしょうか?
EOF
は、ファイルの終わりと言うことで、読むべきデータがもう無いと言うことです。つまりデータはありません。
C等では、EOF
をプログラム上でデータで扱いたいというニーズのために、「ファイル中に絶対に存在しない値」として、-1
を使っています。
他の言語ではまた別の手段でEOF
を判断します。
#追記
歴史的なCP/M等の0001 1010 = 0x1A = SUB(substitute)については、ikedasさんの書かれている通りで、EOFというわけでは無いです。ファイルサイズがちょうど128の整数倍のファイルだと0x1Aは付きませんので、「0x1Aが出てくるまで読む」というプログラムはバグと言うことです。
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
を返すようになっています。
つまりシステムコールレベルでは、「read
の戻り値が0
」というのがEOF
です。
投稿2016/10/18 12:50
編集2016/10/18 13:26総合スコア86295
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/18 14:43

0
ベストアンサー
普通はファイルの末尾にeofという記号があるわけではありません。もちろん、例外もあります。
ファイルを読み込む下請けプログラ厶が、末尾に到達したことを元請けに知らせる記号として使われます。
つまり、下請けプログラムと元請けプログラムの間で取り決められるものであって、ファイルの中にこんな記号があるわけではありません。
投稿2016/10/18 22:02
総合スコア4853
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/19 10:49