有什么理由在 "read-only" 之后以 "write-append" 的身份重新打开吗?

Any reason to reopen as "write-append" after "read-only"?

我有一个包含程序事件流的保存文件。程序可以读取文件并执行事件以恢复以前的状态(比如在程序调用之间)。之后,所有新事件都会附加到此文件。

我可以以读写方式打开文件一次 (fopen rw),而不暴露使用模式。

但我想知道首先以只读方式打开它 (fopen r) 然后再以追加方式重新打开它 (freopen a) 是否有任何好处。会有什么明显的区别吗?

不,以只读方式打开文件然后以追加模式重新打开文件没有任何具体好处。如果您需要在程序执行期间更改文件,那么以按模式打开它会更好。

在您的情况下可能没有任何具体好处,但 freopen 的主要用途是更改与标准文本流(stdin、stdout、stderr)关联的文件。如果在普通文件上使用 if ,它可能会影响代码的可读性。在你的情况下,你首先以只读模式打开,但如果你打开流作为输出,我们需要记住一些关于 freopen 的事情。

  1. 在 Linux 上,当旧文件描述符的内核结构在调用 freopen 之前未完全初始化时,freopen 也可能会失败并将 errno 设置为 EBUSY
  2. 不应在输出流上使用 freopen,因为它会在关闭旧文件描述符时忽略错误。

阅读 GNU 手册中有关 freopen 和 fclose 的可能错误情况的信息:https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#Opening-Streams