在Linux上以原子方式交换两个文件的内容

在Linux上以原子方式交换两个文件的内容,第1张

概述我有两个文件,A和B,每个文件都有自己的内容. 我想交换这两个文件,所以A将成为B,B将成为A.但我想保证没有其他进程会发现这两个文件处于不一致的状态,也没有任何进程会找到任何那些文件丢失了,即使是很短的时间.因此,作为一项副业,我还要保证,如果在运营期间出现任何问题,任何事情都不会改变(有点像我猜的交易). 在OS X上有一个swapata()函数,所以我想我正在寻找Linux的等价物,或者至少 我有两个文件,A和B,每个文件都有自己的内容.

我想交换这两个文件,所以A将成为B,B将成为A.但我想保证没有其他进程会发现这两个文件处于不一致的状态,也没有任何进程会找到任何那些文件丢失了,即使是很短的时间.因此,作为一项副业,我还要保证,如果在运营期间出现任何问题,任何事情都不会改变(有点像我猜的交易).

在OS X上有一个swapata()函数,所以我想我正在寻找Linux的等价物,或者至少是一个等效的原子文件交换方法.

解决方法 你可以使用(最近的) linux syscall renameat2

这是定义:

int renameat2(int olddir,const char *oldname,int newdir,const char *newname,unsigned int flags);

如果需要,您可以在the kernel’s Git repo找到它的源代码.

它与renameat基本相同,但是如果你传递REname_EXCHANGE标志,它将交换两个文件,而不是将一个文件重命名为另一个文件.

该 *** 作是原子的.

总结

以上是内存溢出为你收集整理的在Linux上以原子方式交换两个文件的内容全部内容,希望文章能够帮你解决在Linux上以原子方式交换两个文件的内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1027954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存