Posted on 2008-08-25 10:30
Prayer 閱讀(400)
評論(0) 編輯 收藏 引用 所屬分類:
Shell
如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1
函數(shù)名: feof
功 能: 檢測流上的文件結(jié)束符
用 法: int feof(FILE *stream);
程序例:
#include <stdio.h>
int main(void)
{
FILE *stream;
/* open a file for reading */
stream = fopen("DUMMY.FIL", "r");
/* read a character from the file */
fgetc(stream);
/* check for EOF */
if (feof(stream))
printf("We have reached end-of-file\n");
/* close the file */
fclose(stream);
return 0;
}
feof(fp)有兩個返回值:如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0。
EOF是文件結(jié)束標志的文件。在文本文件中,數(shù)據(jù)是以字符的ASCⅡ代碼值的形式存放,ASCⅡ代碼的范圍是0到255,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標志。
當把數(shù)據(jù)以二進制形式存放到文件中時,就會有-1值的出現(xiàn),因此不能采用EOF作為二進制文件的結(jié)束標志。為解決這一個問題,ASCI C提供一個feof函數(shù),用來判斷文件是否結(jié)束。feof函數(shù)既可用以判斷二進制文件又可用以判斷文本文件。
“C”語言的“feof()”函數(shù)和數(shù)據(jù)庫中“eof()”函數(shù)的運做是完全不同的。數(shù)據(jù)庫中“eof()”函數(shù)讀取當前指針的位置,“C”語言的“feof()”函數(shù)返回的是最后一次“讀操作的內(nèi)容”。多年來把“位置和內(nèi)容”相混,從而造成了對這一概念的似是而非。
那么,位置和內(nèi)容到底有何不同呢?舉個簡單的例子,比如有人說“你走到火車的最后一節(jié)車箱”這就是位置。而如果說“請你一直向后走,摸到鐵軌結(jié)果”這就是內(nèi)容。也就是說用內(nèi)容來判斷會“多走一節(jié)”。這就是完全依賴于“while(!feof(FP)){...}”進行文件復制時,目標文檔總會比源文檔“多出一些”的原因。
在“C”文件讀取操作時不能完全依賴于“while(!feof(FP)){...}”的判斷。