EOF

EOF

EOF是一個計算機術語,為End Of File的縮寫,在操作系統中表示資料源無更多的資料可讀取。資料源通常稱為檔案或串流。通常在文本的最後存在此字元表示資料結束。

概述


從一個終端的輸入從來不會真的“結束”(除非設備被斷開),但把從終端輸入的數據分區成多個“文件”卻很有用,因此一個關鍵的序列被保留下來來指明輸入結束。在UNIX和AmigaDOS中,將擊鍵翻譯為EOF的過程是由終端的驅動程序完成的,因此應用程序無需將終端和其它輸入文件區分開來。Unix平台的驅動程序在行首傳送一個傳輸結束字元(Control-D,ASCII編碼為為04)來指明文件結束。在AmigaDOS中,驅動程序傳送一個Control-\來指明文件結束(而Control-D被用作中斷字元)。要向輸入流中插入一個真正的Control-D字元,用戶需要把一個“引用”命令字元放在它的前面(通常是Control-V,表示下一個字元不作為控制字元,而是按照字面量使用)。
在微軟的DOS和Windows(以及CP/M和許多DEC操作系統)中,讀取數據時終端不會產生EOF。此時,應用程序知道數據源是一個終端(或者其它“字元設備”),並將一個已知的保留的字元或序列解釋為文件結束的指明;最普遍地說,它是ASCII碼中的替換字元(Control-Z,代碼26)。一些MS-DOS程序,包括部分微軟MS-DOS的shell(COMMAND.COM)和操作系統功能程序(如EDLIN),將文本文檔中的Control-Z視為有意義數據的結尾,並且/或者在寫入文本文檔時將Control-Z添加到文檔末尾。這是由於兩個原因:
• 向後兼容CP/M。CP/M的第1版與第2版的文件系統以128位元組“塊”的倍數記錄文件長度,所以當有意義數據在一個“塊”的中間結束時,習慣上用Control-Z字元來標記它,此後至塊結尾的位元組為未利用。而MS-DOS文件系統總會記錄文件確切的位元組長度,所以在MS-DOS中文件不再必需以Control-Z字元來標記結尾。
• 它使得應用程序在從終端和文本文檔讀取數據時得以使用相同的代碼。

計算機術語


概念

在C語言中,或更精確地說成C標準函數庫中表示文件結束符(end of file)。在while循環中以EOF作為文件結束標誌,這種以EOF作為文件結束標誌的文件,必須是文本文件。在文本文件中,數據都是以字元的ASCII代碼值的形式存放。我們知道,ASCII代碼值的範圍是0~127,不可能出現-1,因此可以用EOF作為文件結束標誌。

應用

檔案存取或其它 I/O 功能可能傳回等於象徵符號值 (巨集) EOF 指示檔案結束的情形發生。實際上 EOF 的值通常為 -1,但它依系統有所不同。巨集 EOF會在編譯原始碼前展開實際值給預處理器。
C語言中,EOF常被作為文件結束的標誌。還有很多文件處理函數處錯誤后的返回值也是EOF,因此常被用來判斷調用一個函數是否成功。
例如:
在 UNIX中, EOF表示能從互動式 shell (終端) 送出 Ctrl+D (習慣性標準)。在微軟的 DOS 與 Windows 中能送出 Ctrl+Z。在某些例子處理純文字檔案或從"字元設備"讀入資料,微軟MS-DOS的 shell 或系統程序會加入ASCIIControl-Z 字元到磁碟檔案結束處 (儘管基本核心MSDOS.SYS檔案寫入呼叫從未附加 Control-Z)。這是向下相容於一些奇特的CP/M功能,從CP/M 檔案系統只能就記錄的檔案長度分配多少 128 位元 "記錄"。MS-DOS 檔案系統從一開始就能精確的記錄檔案的位元長度。
ASCII控制字元在字元串流是 out-of-band 不可列印字元。通常表可讀的助憶碼。
在控制台要輸入eof的話 按ALT+65535就可以了。

與feof

C語言中,當把數據以二進位形式存放到文件中時,就會有-1值的出現,此時不能採用EOF作為二進位文件的結束標誌。為解決這個問題,ANSI C提供一個feof函數,用來判斷文件是否結束。如果遇到文件結束,函數feof(fp)的值為1,否則為0.feof函數既可用以判斷二進位文件是否結束,也可以用以判斷文本文件是否結束。
例如:編寫程序,用於把一個文本文件(源文件)複製到另一個文件(目的文件)中。源文件名為file_a.dat,目的文件名為file_b.dat。程序如下:

函數


返回一個數值(整數類型Integer),它包含布爾值Boolean值True,表明已經到達為Random(Open語句方法)或順序Input (Open 語句方法)打開的文件的結尾。
語法
EOF(filenumber)
必要的filenumber參數是一個Integer,包含任何有效的文件號。
說明
EOF (End Of File)
使用EOF是為了避免因試圖在文件結尾處進行輸入而產生的錯誤。
直到到達文件的結尾,EOF函數都返回False。對於為訪問Random或Binary而打開的文件,直到最後一次執行的Get語句無法讀出完整的記錄時,EOF都返回False。