加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:26:42 所属栏目:Linux 来源:网络整理
导读:我有两个文件,A和B,每个文件都有自己的内容. 我想交换这两个文件,所以A将成为B,B将成为A.但我想保证没有其他进程会发现这两个文件处于不一致的状态,也没有任何进程会找到任何那些文件丢失了,即使是很短的时间.因此,作为一项副业,我还要保证,如果在运营期间出
我有两个文件,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标志,它将交换两个文件,而不是将一个文件重命名为另一个文件.

该操作是原子的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读