【发布时间】:2013-05-16 16:05:31
【问题描述】:
到目前为止,我已经知道EOF 是一个特殊字符,它自动插入到文本文件的末尾以指示其结束。但我现在觉得有必要对此进行更多澄清。我在谷歌和维基百科页面上查看了EOF,但他们无法回答以下问题,也没有确切的 Stack Overflow 链接。所以请帮助我:
-
我的书说二进制模式文件会根据文件目录条目中存在的字符数来跟踪文件的结尾。 (与具有特殊 EOF 字符来标记结尾的文本文件相反)。那么
EOF在二进制文件中的故事是什么?我很困惑,因为在以下程序中,我在以二进制模式从.exe文件中读取时成功地使用了!=EOF比较:#include<stdio.h> #include<stdlib.h> int main() { int ch; FILE *fp1,*fp2; fp1=fopen("source.exe","rb"); fp2=fopen("dest.exe","wb"); if(fp1==NULL||fp2==NULL) { printf("Error opening files"); exit(-1); } while((ch=getc(fp1))!=EOF) putc(ch,fp2); fclose(fp1); fclose(fp2); } -
EOF是不是一个特殊的“字符”?或者它是维基百科所说的条件,计算机知道何时返回特定值,如-1(我的计算机上的EOF)?这种“条件”的例子是字符读取函数完成读取所有存在的字符,或者字符/字符串 I/O 函数在读取/写入时遇到错误?有趣的是,
EOF的 Stack Overflow 标记融合了EOF的这两个定义。EOF的标签表示“在编程领域,EOF 是一个字节序列(或字符),表示在此之后没有更多内容。”,同时在“关于"部分,"文件结束(通常缩写为 EOF)是计算机操作系统中无法从数据源读取更多数据的条件。数据源通常称为文件或流。" em>
但我有一种强烈的感觉 EOF 不会是一个字符,因为在 I/O 期间遇到错误时,其他所有函数似乎都会返回它。
如果你能帮我解决这件事,你会很高兴的。
【问题讨论】:
-
@Mat 谢谢你的链接。看起来很详尽。latedev.wordpress.com/2012/12/04/all-about-eof
标签: c binaryfiles eof