
No.3ベストアンサー
- 回答日時:
★ファイルの終了記号『EOF=(-1)』はファイル内に書き込みません。
・その代わりに Windows などの OS がファイルのサイズを管理していて、そこへの情報を
書き込むことになります。→書き込み後の『fclose』関数などが行っている事になる。
・質問者さんの例えで行くと『A』『B』『C』という3バイトがファイル・サイズとして、
OS の管理しているファイル情報に記録されます。
・それで今度は『getc』関数などで読み出すと『A』『B』『C』という3文字(バイト)を
取得しますが、次に1文字を読み出そうとするとOS の管理しているファイル情報より
データがない事が分かるので、終了記号『EOF』を分かりやすく返してくるのです。
決してファイル内に終了記号『EOF』があって、それを読み込んで『EOF=(-1)』を返して
いるわけではありません。→分かりますか?イメージが…。
・なお、テキストファイルの場合は『^Z=(26)』の文字コードをファイルの終了として処理
する場合があります。昔の MS-DOS という OS ではこれが基本で、ファイルの末尾に『^Z』
を出力して、その後に隠された文章などを記述すると簡単な『秘密文章』が記録できました。
しかし、そのテキストをメモ帳などのソフトで読み込んで上書きすると『秘密文章』をメモリ
に読み込んでいないため削除されてしまいます。→独自のソフトでやり取りする必要があります。
最後に:
・過去に似たような質問がありました。
・こちらにも『EOF』の詳しい回答を書き込みましたので一度読んでみて下さい。
・回答者 No.1、No.4 です。→『fgets関数のEOFの扱い方について』
・以上。おわり。→下の『参考URL』をどうぞ。
参考URL:http://oshiete1.goo.ne.jp/qa2625434.html
とてもよく理解できました。それと、関数が何をやっているかまで理解しないといけないということを感じました。(どれを見たらいいのかはこれから探そうと思います。)ありがとうございました。
No.2
- 回答日時:
少し混乱している気配がしますが...
> ファイルの終了記号「EOF(=-1)」っていつ誰が書くのでしょうか。
通常-1に定義されるEOFマクロというのは、ライブラリ関数が返却値として返すものです。これが書き込まれるとすれば、fgetcなどの関数が呼び出し元に戻るとき、あるいは返却値を何らかの変数に代入するときです。
あるいは、FILE型が内部的に管理している「ファイル終了表示子」の意味であれば、fgetcなどの入力関数を呼び出しによって、ファイルの終端に達したときにセットされます。
テキストファイル自体の終端に書き込まれる(ことがある)通常0x1aの値のことであれば、ライブラリ等の実装しだいですが、fclose時に書き込まれる可能性が高いでしょう。
-1はライブラリ関数がEOFの返却値として返したもので、読み込んだデータとは違うということが判りました。ありがとうございました。
No.1
- 回答日時:
EOFはファイルの中に存在しているのではありません。
細かく言うとOSによってはそういう可能性もなくはないのですが、WindowsとかUNIX類では
そうです。
ファイルの長さなどを管理しているので、ファイルの終端はEOFがあるかどうかを見なくても
判断できます。
たとえばgetcの中に潜ると、
何段か下請け関数を通過してOSのシステムコールまでいきます。
OSに「このファイルの次のデータくれ」と要求して、OSから
「んなもんないよ」という返事が来たら、
getcが -1 (EOF)を返しているというだけのことなのです。
Windows/MS-DOSだとテキストモードでオープンすると、0x1aという値のキャラクタを
見つけると
そこでファイルの終わりと見なしますが、基本は同じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Access(アクセス) アクセス レポートを開いたときにパラメーターの自動入力がしたい 4 2022/11/30 11:21
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- システム 外付けHDDの初期化について 4 2023/03/05 21:19
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
- 高校 ノートの判断基準について(?) 3 2022/07/15 21:39
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
テキストファイルの最終行を削...
-
htmlを置換する方法とjsp表示
-
複数ファイルによる共通の外部...
-
複数のファイルからのデータの...
-
javaで例外エラーが発生した際...
-
画像読み込み時のOutOfMemory
-
Access2010の最適化設定について
-
C言語でテキストファイルに文...
-
処理負荷特定で考えられる要因...
-
VBに、Cのincludeのようなもの...
-
Excelマクロでの再読込み方法
-
マッチング処理
-
ドラッグアンドドロップでファ...
-
symantec社の製品名及び機能の違い
-
2つのファイルを比較するC言語...
-
gccでリソースファイルを使わな...
-
ファイルからサイズ不明の行デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
VB.NETによるプロセス間通信
-
VBAにてEXCEL以外のファイル(テ...
-
分割コンパイルの#defineについて
-
ファイルの結合
-
iniファイルに追記がしたいです。
-
VBに、Cのincludeのようなもの...
-
動画処理のライブラリについて
-
Cでのネットワークファイルの読...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
おすすめ情報