假设我有一个(单线程)程序,它(专门)打开一个大文件并执行两次不重叠的写入:
int fd = open(path, O_RDWR);
pwrite(fd, data1, size1, offset1);
pwrite(fd, data2, size2, offset2);
close(fd);
是否有任何保证(通过 posix、linux 或 ext4 等常见文件系统),在电源故障的情况下,data2
的
no部分将最终永久存储,除非
data1
的all也最终在永久存储?
或者,换句话说,文件(在永久存储中)不会最终处于第二次写入开始而第一次写入尚未完成的状态?
或者我是否必须在写入之间
fsync(fd)
/fdatasync(fd)
才能实现此目的?
无法保证向文件发出的写入是持久的(即写入稳定存储),或者它们在没有显式同步的情况下保持特定的顺序。
如果耐用性和订购很重要(例如,为了停电安全),您应该:
这应该保证写入的顺序和持久性。