![]() |
1
14
rename function must be atomic .
但这并不能解决确保rename()操作持久的问题。 POSIX answers this question : 因此,如果您fsync()一个目录,等待的重命名操作必须在返回时传输到磁盘。任何一个目录的fsync()都应该足够了,因为rename()操作的原子性要求两个目录的更改原子同步。
(更新了附加信息:Linux特定与可移植行为) |
![]() |
2
16
不幸的是,戴维的回答是错误的。
真正的问题应该是: 如何在通过posixapi支持持久重命名的系统上进行持久重命名? 您需要对这两个源代码执行fsync() 和 fsync(destdirfd)是否也隐式地fsync源目录?
如果我fsync源目录而不是目标目录,这是否也会隐式fsync目标目录?
是否有任何有用的相关测试/调试/学习工具(故障注入器、自省工具、模拟文件系统等)?
|
![]() |
3
-1
首先,我要阅读您正在使用的平台上的rename(2)手册页。 |
![]() |
4
-4
在我看来,你好像是在做文件系统的工作。如果移动文件,内核和文件系统负责原子操作和故障恢复,而不是代码。 无论如何,本文似乎解决了您关于fsync的问题: http://blogs.gnome.org/alexl/2009/03/16/ext4-vs-fsync-my-take/ |
|
Avoxy · 使用正则表达式重命名文件-Linux 6 年前 |
![]() |
Ilia Shifrin · 在文件夹中批量重命名JavaScript 6 年前 |
![]() |
MakkaCha · 使用批处理脚本从文件名中删除日期 7 年前 |