保证文件操作的顺序 [英] Guarantees of order of the operations on file

查看:109
本文介绍了保证文件操作的顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



考虑我有一个文件 foo.dat ,我更新如下:

$ $ $ $ $ $ c $ lseek(fd,pos_a,SEEK_SET) ;
write(fd,data_a,size_a); //< - 操作A
lseek(fd,pos_b,SEEK_SET);
write(fd,data_b,size_b); //< - 操作B
lseek(fd,pos_c,SEEK_SET);
write(fd,data_c,size_c); //< - 操作C

这样我可以在文件A,B,C中进行更新。 - 软件崩溃或例如电源故障。

有没有任何担保,如果他们被执行的操作是以相同的顺序完成。



即那就不会有什么或A或A和B或A和B和C而不是A和C或我知道如果我在A和B之间调用 fsync(fd)并且在A之间是相同的和C但它
也保证实际上在文件系统上。

我不关心数据的松散,而是关于它的一致性。



POSIX标准保证不会有乱序执行吗?

所以:


  • 有没有这样的保证?

  • 在POSIX平台上


  • 如果没有什么保证(除了 fsync ),我可以拥有?


解决方案

这是POSIX强制要求 $ b


成功完成write()到一个常规文件之后eturned:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆