【问题标题】:Does `close()` flush buffered output data?`close()` 是否刷新缓冲的输出数据?
【发布时间】:2018-10-14 20:59:50
【问题描述】:

fclose() 刷新缓冲的输出数据。

close() 是否也刷新缓冲的输出数据?

【问题讨论】:

  • C 标准没有定义close() 函数。你的意思是POSIX close() 吗?
  • 简单地说,“否”,因为使用文件描述符和close(),程序中没有要刷新的缓冲区,这与fclose() 不同,FILE * 在程序中确实有缓冲区可能需要在关闭时刷新。

标签: c linux io


【解决方案1】:

在 C 程序中没有与打开的文件描述符关联的缓冲区,因此没有缓冲数据可谈。

您的操作系统可能有也可能没有一些与打开的文件描述符(或相应文件所在的设备)相关联的缓冲区,具体取决于文件的性质。这些通常在应用程序级别是不可见的,不受close 的影响。

【讨论】:

    【解决方案2】:

    表格this来源:

    成功关闭并不能保证数据已成功保存到磁盘,因为内核延迟写入。文件系统在流关闭时刷新缓冲区并不常见。如果您需要确保数据是物理存储的,请使用 fsync(2)。 (此时将取决于磁盘硬件。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 2011-11-24
      • 2018-04-17
      相关资源
      最近更新 更多