0

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

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

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

4

2 回答 2

1

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

于 2017-11-04T14:02:13.683 回答
1

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

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

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

于 2017-11-06T03:14:37.657 回答