如何测试两条路径是否可硬链接?
我在一侧有文件路径以及我想要复制它们的新路径。
如何测试它们是否可以简单地硬链接或应该复制?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我在一侧有文件路径以及我想要复制它们的新路径。
如何测试它们是否可以简单地硬链接或应该复制?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
第1步:调用链接。
步骤 2:如果返回 -1,且
errno
设置为EXDEV
,则进行复制。[更新]
一般来说,没有可移植(且可靠)的方法来回答这个问题。我认为,您可以获得的最接近的结果是调用 statvfs 来获取源和目标,然后比较 f_fsid 字段href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_statvfs.h.html" rel="nofollow">statvfs 结构。
不幸的是,POSIX 不保证有关
f_fsid
字段的任何特定信息。该测试应该在 Linux 上运行,除非您询问的是 NFS 安装的文件系统...Step 1: Call link.
Step 2: If it returns -1 with
errno
set toEXDEV
, then make a copy.[update]
In general, there is no portable (and reliable) way to answer this question. The closest you can get, I think, is to call statvfs for the source and destination and then compare the
f_fsid
fields of the statvfs structures.Unfortunately, POSIX does not guarantee anything in particular about the
f_fsid
field. This test should work on Linux unless maybe you are asking about NFS-mounted filesystems...Nemo 的答案确实是最简单的解决方案:尝试
link(2)
系统调用。如果您只想知道路径是否可硬链接,甚至不尝试
link(2)
系统调用,您可以使用 statfs(2),检查它们是否位于同一文件系统上,并检查文件系统的类型是否足够好。Nemo's answer is indeed the simplest solution: try the
link(2)
syscall.If you only want to know if the path are hard linkable without even attempting the
link(2)
syscall, you could find their filesystem e.g. using statfs(2), check that they are on the same filesystem, and check that the filesystem's type is good enough.