我想交换这两个文件,所以A将成为B,B将成为A.但我想保证没有其他进程会发现这两个文件处于不一致的状态,也没有任何进程会找到任何那些文件丢失了,即使是很短的时间.因此,作为一项副业,我还要保证,如果在运营期间出现任何问题,任何事情都不会改变(有点像我猜的交易).
在OS X上有一个swapata()函数,所以我想我正在寻找Linux的等价物,或者至少是一个等效的原子文件交换方法.
解决方法 你可以使用(最近的) linux syscallrenameat2
这是定义:
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上以原子方式交换两个文件的内容所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)