EOF

EOF

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

基本介紹

  • 中文名:檔案結束符
  • 外文名:EOF
  • 全稱:End Of File
  • 釋義:資料源無更多的資料可讀取
  • 套用檔案存取
  • 學科:計算機 
概述,計算機術語,概念,套用,與feof,EOF 函式,

概述

從一個終端的輸入從來不會真的“結束”(除非設備被斷開),但把從終端輸入的數據分區成多個“檔案”卻很有用,因此一個關鍵的序列被保留下來來指明輸入結束。在UNIX和AmigaDOS中,將擊鍵翻譯為EOF的過程是由終端的驅動程式完成的,因此應用程式無需將終端和其它輸入檔案區分開來。Unix平台的驅動程式在行首傳送一個傳輸結束字元(Control-D,ASCII編碼為為04)來指明檔案結束。在AmigaDOS中,驅動程式傳送一個Control-\來指明檔案結束(而Control-D被用作中斷字元)。要向輸入流中插入一個真正的Control-D字元,用戶需要把一個“引用”命令字元放在它的前面(通常是Control-V,表示下一個字元不作為控制字元,而是按照字面量使用)。
在微軟的DOSWindows(以及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,因此常被用來判斷調用一個函式是否成功。
例如:
#include <stdio.h>int main(void){int n,i;int array[25];while(scanf("%d",&n)!=EOF){for (i=0; i<n; i++)scanf("%d",&array[i]);for (i=0; i<n; i++)printf ("%d ",array[i]);}return 0;}
在 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。程式如下:
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>void filecopy(FILE *,FILE *);main ( ){FILE*fpin,*fpout;fpin =fopen ("file_a.dat","r"); /*打開輸入檔案*/fpout = fopen ("file_b.dat","w"); /*打開輸出檔案*/filecopy( fpin,fpout ); /*把fpin所指檔案中的內容輸出到fpout所指檔案中*/fclose ( fpin );fclose ( fpout ); /*關閉輸入輸出檔案*/}void filecopy( FILE *fpin, FILE *fpout ){char ch;ch = getc ( fpin ); /*先讀一次檔案再去判檔案是否結束*/while ( !feof( fpin ) ) /*當未到檔案末尾是進行循環*/{putc ( ch, fpout ); ch= getc ( fpin );} /*逐個字元進行複製*/}

EOF 函式

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

相關詞條

熱門詞條

聯絡我們