在没有 fclose() 的情况下调用 fflush() 是否安全

Is it safe to call fflush() without fclose()

我正在为我的嵌入式应用程序编写记录器。我需要将所有日志写入文件。目前我正在为每次写入打开和关闭文件。

为了提高性能,在整个应用程序范围内保持日志文件打开并在每次写入时调用 fflush() 而不关闭文件是否安全?

如果你读过linux程序员手册,你会发现fclose会"flushes the stream pointed to by stream and closes the underlying file descriptor"。所以,你可以只调用 fclose() 而不调用 fflush()。

如果你想多次写入同一个文件。您可以保持文件打开状态,然后多次调用 fflush。 "fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function".

总之,fflush将缓冲数据写入文件,fclose写入缓冲数据并关闭文件。

在每次写入日志后调用 fflush() 并保持文件打开应该是安全的,但强烈建议以追加模式打开文件,尤其是当其他进程写入同一日志时文件。在这种情况下,仍然不能确保原子写入。