如何在两条路径中进行测试是难以连接的?

时间:2012-02-03 05:57:04

标签: linux unix inode hardlink

我在一侧有文件路径,而我想要复制它们的新路径。

如何测试它们是否可以简单地链接或是否应该被复制?

2 个答案:

答案 0 :(得分:4)

第1步:致电link

步骤2:如果在errno设置为EXDEV的情况下返回-1,则复制。

[更新]

一般来说,没有便携(可靠)的方式来回答这个问题。我认为,您最接近的是致电statvfs获取来源和目的地,然后比较statvfs structuresf_fsid字段。

不幸的是,POSIX并不保证f_fsid字段的任何特别之处。这个测试应该适用于Linux,除非您可能会询问NFS挂载的文件系统......

答案 1 :(得分:1)

Nemo's answer确实是最简单的解决方案:尝试link(2)系统调用。

如果您只是想知道路径是否可以硬链接而不尝试link(2)系统调用,您可以找到他们的文件系统,例如使用statfs(2),检查它们是否在同一个文件系统上,并检查文件系统的类型是否足够好。