如何测试两条路径是否可硬链接?

发布于 2025-01-02 05:46:55 字数 61 浏览 0 评论 0 原文

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

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

I have file paths in one side and their new paths where I want to duplicate them.

How to test whether they can be simply hardlinked or they should be copied?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一刻暧昧 2025-01-09 05:46:55

第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 to EXDEV, 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...

菊凝晚露 2025-01-09 05:46:55

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文