- ベストアンサー
EOF
ふと思ったのですが、 バイナリファイルの中の途中のデータが EOFと認識されないのはどんな仕組みなのでしょうか? 私の理解は バイナリファイルはどんなデータも書き込める。 なのです。 途中にEOFと認識されるようなデータが 書き込まれることは無いのかな? と思ったのです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
バイナリデータの中に「EOF」が入っている場合それを「EOF]と認識してしまうと、その後のデータを読めね九なってしまいます。 そこで、データの容量をチェックして総てのファイルを処理するようにしているのです。
その他の回答 (5)
- shige_70
- ベストアンサー率17% (168/946)
EOF=0x1aというのはDOSのテキストファイルの話です。 一般にCのライブラリ関数でEOFが返ってくるのは、単純に『読み込むデータがなくなった』ときです。 いわゆるバイナリファイルも当然大きさは有限ですから、順繰りに読んでいけばいつかはファイルの終端に達し、読むべきデータがなくなります。そうすると、読み込み関数はEOF(もしくはNULL)を返すのです。 逆に、途中のデータを読んでいて、その先にまだデータが残っている限り、EOFとは認識されないわけです。 ちなみに、C言語の世界でEOFの実体は -1 です。もちろん実際のファイルに-1というデータが入っているわけではありません。
お礼
ありがとうございました。 char c = fgetc(...); if(c == EOF){.... のように、 して不安定なエラーが出て、 ぎもんがしょうじたのです。 もちろん int c = fgetc(...); if(c == EOF){.... と修正したら エラーは出なくなったのですが、 EOFとは何だろう? と思ったのです。 みなさまもおかげですっきりいたしました。 ありがとうございました。
- hideo2004
- ベストアンサー率35% (68/189)
Windowsの場合、ファイルをテキストモードでオープンした場合、ファイル中の"0x1a"をEOFと扱います。 したがって、ファイルをオープンしたときのモードによってEOFの扱いが違ってきます。 なお、UNIXにはテキストモードはありません。
お礼
ありがとうございました。 char c = fgetc(...); if(c == EOF){.... のように、 して不安定なエラーが出て、 ぎもんがしょうじたのです。 もちろん int c = fgetc(...); if(c == EOF){.... と修正したら エラーは出なくなったのですが、 EOFとは何だろう? と思ったのです。 みなさまもおかげですっきりいたしました。 ありがとうございました。
- winterofmeei
- ベストアンサー率22% (20/88)
そもそもEOFとはデータではないのでは? バイナリファイルと言っても1byteのデータは0~255の値なので、fgetc関数などを用いたときEOFと区別がつけられるのではないでしょうか?
ちなみに、最近はテキストファイルでもEOFが書き込まれてないことが多いです。 ファイルのサイズ情報を見れば、どこでファイルが終了するのか一目瞭然ですから、わざわざ入れる必要がないというわけです。
お礼
ありがとうございました。 char c = fgetc(...); if(c == EOF){.... のように、 して不安定なエラーが出て、 ぎもんがしょうじたのです。 もちろん int c = fgetc(...); if(c == EOF){.... と修正したら エラーは出なくなったのですが、 EOFとは何だろう? と思ったのです。 みなさまもおかげですっきりいたしました。 ありがとうございました。
- hideo2004
- ベストアンサー率35% (68/189)
バイナリモードでファイルを読んでいる場合、EOFの検出はファイル内のデータとは関係ありません。 読み込みで、ファイルの最後に到達し、それ以上読み込むデータが無くなったときにEOFとなります。
お礼
ありがとうございました。 char c = fgetc(...); if(c == EOF){.... のように、 して不安定なエラーが出て、 ぎもんがしょうじたのです。 もちろん int c = fgetc(...); if(c == EOF){.... と修正したら エラーは出なくなったのですが、 EOFとは何だろう? と思ったのです。 みなさまもおかげですっきりいたしました。 ありがとうございました。
お礼
ありがとうございました。 char c = fgetc(...); if(c == EOF){.... のように、 して不安定なエラーが出て、 ぎもんがしょうじたのです。 もちろん int c = fgetc(...); if(c == EOF){.... と修正したら エラーは出なくなったのですが、 EOFとは何だろう? と思ったのです。 みなさまもおかげですっきりいたしました。 ありがとうございました。