(Translated by https://www.hiragana.jp/)
End Of File - Wikipedia

End Of File

ファイルのサイズをえた最初さいしょのバイトに対応たいおうするオフセット

コンピューティングにおいて、End Of File(エンド・オブ・ファイル、略称りゃくしょう:EOF[1])とは、ファイルストリームにおいて、それよりさきすデータが存在そんざいしない(終端しゅうたんである)ことをしめ状態じょうたいのことである。

標準ひょうじゅんCライブラリでは、getcharのような文字もじ関数かんすうは、ファイルやストリームの終端しゅうたんったときに、シンボル(マクロ) EOFひとしいかえす。EOF実際じっさい実装じっそう依存いぞんするが(ただし、GNU Cライブラリなど、一般いっぱんてきには -1 が使用しようされる[2])、文字もじしめすべてのコードとことなるしめされる。fgets()はヌルポインタかえるなど、おな言語げんごにおいても様々さまざまである。

データをシーケンシャルアクセスしていって、最後さいごのデータまでんだ場合ばあい(あるいは、さらにつぎのデータをもうとしたのち[3])、EOFが発生はっせいする。readなどのブロックを関数かんすうは、もどとしてったバイトかずかえし、これが要求ようきゅうしたバイトすうよりもすくない場合ばあいは、EOFが発生はっせいしたかエラーが発生はっせいしたことをしめす(どちらが発生はっせいしたかは、errno確認かくにんするか、ferrorなどの専用せんよう関数かんすう使用しようすることでることができる)。

データベースにおいてあたえられた条件じょうけんうデータが存在そんざいしない場合ばあい、EOFとなる。EOFの判定はんてい方法ほうほう処理しょりけいによりことなる。

端末たんまつからの入力にゅうりょくは、(デバイスが切断せつだんされないかぎり)実際じっさいには「終了しゅうりょう」することはないが、端末たんまつ複数ふくすうの「ファイル」を入力にゅうりょくすることができるように、入力にゅうりょく終了しゅうりょうしめすためのキー配列はいれつ予約よやくされている。UNIXでは、キーストロークのEOFへの変換へんかんはターミナルドライバによっておこなわれるため、プログラムはターミナルを入力にゅうりょくファイルと区別くべつする必要ひつようがない。デフォルトでは、ドライバは行頭ぎょうとうControl-DをEOFに変換へんかんする。実際じっさいのControl-D(ASCIIコード04)を入力にゅうりょくストリームに挿入そうにゅうするには、ユーザは"quote"コマンド文字もじ (通常つうじょうはControl-V) をまえける。AmigaDOS英語えいごばんでは、Control-DのわりにControl-\を使用しようする。

DOSWindowsCP/Mや、おおくのDECオペレーティングシステム(RT-11VMSなど)では、端末たんまつからのみでEOFが発生はっせいすることはない。そのわり、プログラムはソースがはしまつ(またはの「文字もじデバイス」)であることを認識にんしきし、予約よやくされた文字もじやシーケンスをEOFとして解釈かいしゃくする。一般いっぱんてきには、ASCIIコード26(0x1A)のControl-ZがEOFとして解釈かいしゃくされる。

一部いちぶのDOSシェル(COMMAND.COM)やOSのユーティリティプログラム(EDLINなど)をふくむいくつかのMS-DOSプログラムは、テキストファイルないのControl-Zを意味いみのあるデータのわりをしめすものとしてあつかい、テキストファイルのみのさいにControl-Zを最後さいご追加ついかする。これはつぎの2つの理由りゆうおこなわれた。

  • CP/Mとの後方こうほう互換ごかんせいのため。CP/Mのファイルシステムでは、128バイトちょうのレコードの倍数ばいすうでしかファイルのながさを記録きろくしていなかったため、ファイルがレコードの途中とちゅうわった場合ばあい意味いみのあるデータのわりをマークするためにControl-Zが使用しようされていた。MS-DOSのファイルシステム(FAT)ではつねにファイルの正確せいかくなバイトちょう記録きろくしているので、MS-DOSではこのようにする必要ひつようはなかった。
  • プログラムが入力にゅうりょくさいに、端末たんまつとテキストファイルの両方りょうほうおなじコードを使用しようすることができるようにするため。

テープマーク

編集へんしゅう

ANSI X3.27-1969の磁気じきテープ規格きかくでは、ファイルのわりはテープマーク(tape mark)でしめされていた。これは、やく3.5インチのテープのギャップにつづけて、9トラックテープ英語えいごばん場合ばあいは0x13(16進数しんすう)、7トラックテープ英語えいごばん場合ばあいは17(8進数しんすう)という文字もじふくむ1バイトで構成こうせいされていた[4]end-of-tape一般いっぱんてきEOTりゃくされ、2つのテープマークでしめされた。これはIBM 360などで使用しようされていた規格きかくである。テープの物理ぶつりてき終了しゅうりょうせまっていることをらせるために使用しようされた反射はんしゃストリップは、EOTマーカーともばれていた。

脚注きゃくちゅう

編集へんしゅう
  1. ^ Wayne Pollock. “Shell Here Document Overview”. hccfl.edu. 2014ねん5がつ29にち時点じてんオリジナルよりアーカイブ。2014ねん5がつ28にち閲覧えつらん
  2. ^ The GNU C Library "12.15 End-Of-File and Errors"
  3. ^ 最後さいごまで到達とうたつしていても、つぎのデータをもうとしてエラーになるまでは End of File にならない、という振舞ふるまいはわかりにくい。"comp.lang.c FAQ list" Question 12.2参考さんこうのこと。
  4. ^ Tape Transfer (Pre-1977): Exchange Media: MARC 21 Specifications for Record Structure, Character Sets, and Exchange Media (Library of Congress) "TAPE MARK"

関連かんれん項目こうもく

編集へんしゅう