-
EOF
鎖定
EOF是一個計算機術語,為End Of File的縮寫,在操作系統中表示資料源無更多的資料可讀取。資料源通常稱為檔案或串流。通常在文本的最後存在此字符表示資料結束。
EOF內容簡介
從一個終端的輸入從來不會真的“結束”(除非設備被斷開),但把從終端輸入的數據分區成多個“文件”卻很有用,因此一個關鍵的序列被保留下來來指明輸入結束。在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添加到文檔末尾。這是由於兩個原因:
EOF計算機術語
EOF概念
在C語言中,或更精確地説成C標準函數庫中表示文件結束符(end of file)。在while循環中以EOF作為文件結束標誌,這種以EOF作為文件結束標誌的文件,必須是文本文件。在文本文件中,數據都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的範圍是0~127,不可能出現-1,因此可以用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 檔案系統從一開始就能精確的記錄檔案的位元長度。
EOF與feof
C語言中,當把數據以二進制形式存放到文件中時,就會有-1值的出現,此時不能採用EOF作為二進制文件的結束標誌。為解決這個問題,ANSI C提供一個feof函數,用來判斷文件是否結束。如果遇到文件結束,函數feof(fp)的值為1,否則為0.feof函數既可用以判斷二進制文件是否結束,也可以用以判斷文本文件是否結束。
[1]
例如:編寫程序,用於把一個文本文件(源文件)複製到另一個文件(目的文件)中。源文件名為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 );} /*逐個字符進行復制*/ }
EOFEOF 函數
語法
EOF(filenumber)
必要的filenumber參數是一個Integer,包含任何有效的文件號。
説明
EOF (End Of File)
使用EOF是為了避免因試圖在文件結尾處進行輸入而產生的錯誤。