C语言 flush、write()和fflush()之间的实际区别是什么?

kknvjkwl  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(473)

this post中,答案表示
刷新:将应用程序数据的临时状态与数据的永久状态(在数据库中或磁盘上)同步。
我认为,当write()系统调用将某个缓冲区写入I/O设备(如磁盘)时,将执行刷新。
因此,向write()设备写入数据和向该设备刷新数据似乎是在做同样的事情。
如果是这样,我能说用fflush()刷新数据和用write()写入数据是完全相同的吗?

u2nhd7ah

u2nhd7ah1#

首先,让我们做一件显而易见的事情:
fflush
对于输出数据流(以及输出最后作业的更新数据流),会将数据流缓冲区中任何未写入的数据写入相关的输出设备。
C标准并没有说明数据是如何写入输出设备的。在Posix系统上,最有可能是通过write,其他系统可能有不同的(类似的)接口。
从概念上讲,刷新将使用底层写原语将数据从缓冲区传输到输出设备。

简而言之:

  • fflush()write()相同-〉否。
  • fflush()使用write()-〉是的,很有可能。
  • fflush()write()确保将数据写入输出设备-〉Yes。

相关问题