コンピューティング において、ファイルの終端( EOF ) [ 1 ]は、コンピュータのオペレーティングシステムにおいて、データソースからこれ以上データを読み取ることができなくなった状態を指します。データソースは通常、ファイルまたはストリームと呼ばれます。
C 標準ライブラリでは、 getcharなどの文字読み取り関数は、EOFファイルの終端条件が発生したことを示すために、シンボル値 (マクロ) に等しい値を返します。 の実際の値EOFは実装に依存し、負の値でなければなりません ( glibc [ 2 ]のように、一般的には -1 です)。ブロック読み取り関数は読み取ったバイト数を返し、これが要求されたバイト数より少ない場合は、ファイルの終端に達したか、エラーが発生したことを意味します (どちらであるかを判断するにはerrno、 または などの専用関数のチェックferrorが必要です)。
端末からの入力は、端末が切断されない限り、実際には「終了」することはありませんが、端末に複数の「ファイル」を入力すると便利なので、入力終了を示すキーシーケンスが予約されています。UNIX では、キーストロークの EOF への変換は端末ドライバによって実行されるため、プログラムは端末と他の入力ファイルを区別する必要はありません。デフォルトでは、ドライバは行頭のControl-D文字をファイル終了インジケータに変換します。実際の Control-D (ASCII 04) 文字を入力ストリームに挿入するには、ユーザーはその前に「引用符」コマンド文字 (通常はControl-V ) を付けます。AmigaDOSも同様ですが、Control-D の代わりに Control-\ を使用します。
DOSおよびWindows (およびCP/Mや、PDP-6モニタ[ 3 ] RT-11、VMS、TOPS-10 [ 4 ]などの多くのDECオペレーティングシステム)では、端末から読み込んでも EOF は生成されません。代わりに、プログラムはソースが端末 (またはその他の「文字デバイス」) であることを認識し、特定の予約文字またはシーケンスをファイルの終端を示すものとして解釈します。最も一般的なのは、ASCII のControl-Z (コード 26) です。Microsoft MS-DOS シェル ( COMMAND.COM ) の一部やオペレーティングシステムのユーティリティ プログラム ( Edlinなど)を含む一部の MS-DOS プログラムでは、テキスト ファイル内の Control-Z を意味のあるデータの終了を示すものとして扱い、テキスト ファイルを書き込むときに末尾に Control-Z を追加します。これには 2 つの理由があります。
ANSI X3.27-1969磁気テープ規格では、ファイルの終わりはテープマークで示され、テープマークは約 3.5 インチのギャップの後に、 9 トラック テープ0x13の場合は (16 進数) 、7 トラック テープの場合は (8 進数)の文字を含む 1 バイトが続くものでした。[ 5 ]テープの終わりは、一般的にEOTと略され、2 つのテープマークで示されました。これは、たとえばIBM 360で使用された規格です。テープの物理的な終わりが近づいていることを知らせるために使用された反射ストリップも、 EOTマーカーと呼ばれていました。017