feof()在封闭文件上的返回值是多少?

时间:2008-10-07 17:35:04

标签: c file

对于FILE *流,如果我读取尽可能多的数据,feof(stream)会返回非零值。然后,如果我fclose流,它feof(流)将继续返回一个非零值? 是保证吗?

4 个答案:

答案 0 :(得分:12)

在一个已关闭的文件上调用feof()是没有意义的(实际上比没有意义的更糟糕 - 它是未定义的,所以任何事情都可能发生)。

来自C标准:

  

指向FILE的指针的值   对象是不确定的   关联文件已关闭(包括   标准文本流)。

  

成功调用fclose   函数导致流指向   通过流来冲洗和   要关闭的关联文件。任何   流的未写入缓冲数据   被送到主机环境   写入文件;任何未读的   缓冲的数据被丢弃。是否   或者呼叫成功,流   与文件和任何文件脱离关联   缓冲区由setbuf或setvbuf设置   功能与...脱离关联   流(如果是,则解除分配)   自动分配)。

答案 1 :(得分:3)

根据库实现,调用fclose()将导致在FILE结构中释放资源,随后的尝试可能会导致崩溃。我认为这个标准术语是“未定义的行为”。

答案 2 :(得分:2)

不要这样做。不要尝试在已关闭的文件上运行feof()。结果未定义。跟踪哪些文件句柄以其他方式关闭,而不是假设EOF将在它们上发出信号。

一般情况下,在编写可移植代码时必须必须避免C中的未定义行为......它可能会在您的平台上做一些合理的事情,但它可能会在另一个上做一些非常荒谬或意外的事情。

Usenet小组comp.lang.c上的人们多年前出现了一台假想的计算机DeathStation 9000,它在未定义的构造中表现出最令人恐惧的坏行为。这是一种教学工具,可以让你远离C依赖于未定义的行为: - )

答案 3 :(得分:1)

不适用于feof()的每个实现。

事实上,您甚至不能保证在调用fclose后任何 f *调用都能正常工作。