在Linux上primefaces交换两个文件的内容

我有两个文件, AB ,每个都有自己的内容。

我想交换这两个文件,所以A会变成B ,而B会变成A 但是我想要保证没有任何其他进程会发现这两个文件处于不一致的状态,即使是很短的一段时间,任何进程都不会find这些文件中的任何一个。 所以,作为一个副业,我也想保证,如果在操作过程中出现什么问题,什么都不会改变(就像我猜想的那种交易)。

在OS X上有一个exchangedata()函数,所以我想我在找一个相当于Linux的东西,或者至less是一个等价的做primefaces文件交换的方法。

Solutions Collecting From Web of "在Linux上primefaces交换两个文件的内容"

你可以使用(相当新的) linux系统调用renameat2

定义如下:

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

如果需要,你可以在内核的Git仓库上找到它的源代码。

它和renameat基本相同,但是如果你通过标志RENAME_EXCHANGE,它将交换两个文件,而不是将另一个文件重命名。

这个操作是原子的。

我依赖于你的意思是“不一致的状态”。 如果可以接受两个文件是相同的一段时间,那么你可以简单地做:

 ln AC ln BD ln -f DA # now, A and B have the same content ln -f CB 

这也取决于您已经打开文件的进程所需的行为。 请记住,路径不是文件,而只是链接到文件,所以如果进程1通过路径“A”打开文件,然后交换名称A和B,则进程1仍然会打开被引用的文件由名字A.