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

在没有fclose()的情况下调用fflush()安全吗,c,fclose,fflush,C,Fclose,Fflush,我正在为我的嵌入式应用程序编写记录器。我需要将所有日志写入文件。目前,我正在为每次写入打开和关闭文件 为了提高性能,在整个应用程序范围内保持日志文件打开并在每次写入时都不关闭文件的情况下调用fflush()是否安全?如果阅读linux程序员手册,您会发现fclose将“刷新流指向的流并关闭底层文件描述符”。因此,您可以只调用fclose(),而不调用fflush() 如果要在同一文件中多次写入。您可以保持文件处于打开状态,只需多次调用fflush。“fflush()通过流的底层写函数强制写入给定

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


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

如果阅读linux程序员手册,您会发现fclose将“刷新流指向的流并关闭底层文件描述符”。因此,您可以只调用fclose(),而不调用fflush()

如果要在同一文件中多次写入。您可以保持文件处于打开状态,只需多次调用fflush。“fflush()通过流的底层写函数强制写入给定输出或更新流的所有用户空间缓冲数据”


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

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

刷新可能比不刷新好,但除此之外,它是由实现定义的,因此您应该提供有关操作系统、板、规范等的信息。是的,
fflush
不依赖于
fclose
(文件流应该是打开的)
fflush
将写入缓冲区中的剩余字节写入底层文件写入函数(在Linux或任何其他特定于实现的东西下),这是有保证的。但是不能保证底层文件写入函数的实际功能。因此,IMO是针对具体实施的。您是否只尝试调用了
fflush
?@Jabberwocky是的,我尝试了调用fflush,似乎正在工作,但想知道它是否正确。@ChetanPhadtale您的平台是什么?只是出于好奇。