close()在Linux上调用fsync()吗?

use*_*732 9 c unix linux

当我们打电话时close(<fd>),它会自动fsync()同步到物理媒体吗?

Jes*_*mos 10

它不是.调用close()不能保证内容在磁盘上,因为操作系统可能已推迟写入.

作为旁注,请务必检查返回值close().它将告诉您到目前为止的任何延迟错误.如果您想确保磁盘上的内容始终调用fsync()并检查其返回值.

要记住的一件事是后备存储是什么.有些设备可能会执行内部写入延迟,并且在某些情况下内容可能会丢失(尽管较新的存储介质设备通常具有超级电容器以防止这种情况,或者禁用此功能的方法).

  • @FrédéricHamidi:根据定义,`fsync`将数据提交到稳定存储.如果没有,那么您的系统不符合POSIX(即,错误).是的,世界上有许多错误的系统,是的,其中很多都运行Linux,但这并没有使这个答案无效,这是完全正确的. (2认同)