我有一个包含程序事件流的保存文件。程序可以读取文件并执行事件以恢复以前的状态(例如在程序调用之间)。之后,任何新事件都将附加到此文件中。
我可以以读写方式(fopen rw)打开文件一次,而不公开使用模式。
但是我想知道一开始以只读方式打开它(fopen r)和后来以附加方式重新打开它(freopen a)是否有什么好处。会有什么明显的区别吗?
最佳答案
在您的情况下,可能没有任何特定的好处,但是freopen的主要用途是更改与标准文本流(stdin、stdout、stderr)关联的文件。如果在普通文件上使用if,可能会影响代码的可读性。在您的例子中,您首先以只读模式打开,但是如果您以输出方式打开流,那么我们需要记住关于freopen的一些事情。
在Linux上,当旧文件描述符的内核结构在调用freopen之前没有完全初始化时,freopen也可能会失败并将errno设置为EBUSY
不应在输出流上使用freopen,因为它在关闭旧文件描述符时忽略错误。
阅读GNU手册中的freopen和fclose可能出现的错误条件:https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#Opening-Streams