primefaces文件保存在Linux上,不会丢失元数据

我正在研究一个基于Perl的文件同步工具。 它将文件下载到一个临时目录(保证与真实文件位于同一文件系统中),然后将临时文件移到旧文件夹上,保留元数据,如权限,所有权和ACL。 我想知道如何在Linux上实现最后一步。

在Mac OS X上,至less在C中,我会使用exchangedata函数。 这需要两个文件名作为参数,并交换其内容,所有元数据(除了mtime)保持不变。 它保证操作是primefaces的 – 所有的读者都会看到旧文件或新文件,从来没有中间的东西。 不幸的是,我不认为它在Linux上可用。

我知道rename会自动移动,但不会保留元数据。 另一方面,我可以打开文件并用新文件的内容覆盖数据,这将保留所有的元数据,但不会是一个primefaces操作。 有关解决这个问题的任何build议?

我在这里看到的唯一方法是从正在替换的文件中读取元数据,将其应用于临时文件,然后将临时文件重命名为旧文件。 ( rename保留源文件的属性,显然。)

文件系统特定的,但是…

XFS_IOC_SWAPEXT ioctl交换XFS上两个文件描述符的范围。

 #include <xfs/xfs.h> #include <xfs/xfs_dfrag.h> xfs_swapext_t sx = { ..., .sx_fdtarget = fd1, .sx_fdtmp = fd2, ... }; xfs_swapext(fd1, &sx); 

例如,查看xfs_fsr的来源。