我正在为 CIL 代码构建一个 IO 抽象库,并且我很难理解 NTFS 中两个文件夹之间的连接和硬链接之间的差异。
它们相等吗?我应该了解哪些差异?
答案1
NTFS 连接点是一种重分析点,有效地充当符号链接,但仅限于通过绝对路径定位本地目录。
假设你有
C:\>mkdir a b
C:\>linkd b\c C:\a
所发生的情况是,在 的目录表中C:\b
,插入了一个名为 的目录条目c
,其属性$Reparse
包含指定它是与 target 的连接点的数据C:\a
。
当Windows 2000(引入重分析点和连接点时)遇到重分析点时,它会被移交给适当的处理程序。在这种情况下,当访问下面的路径时C:\b\c
,连接点的处理程序将替换该路径C:\b\c
,C:\a
并且正常的文件系统操作将从那里继续。
可以安装其他文件系统过滤器来拦截和处理其他类型的重分析点; Windows Vista、Server 2008 及更高版本附带了 NTFS 上“符号链接”重分析点的处理程序,该处理程序可以指向文件或目录、绝对或相对、本地或远程 - 与其他系统上的符号链接非常相似。
另外,NTFS 确实支持硬链接,这与 UNIX 的方式非常相似 - 多个目录条目可以指向同一个“inode”,即实际的文件数据。这与重新分析点无关。在几乎所有系统上,只能对文件进行硬链接;硬链接目录充满了危险。 (除此之外,..
硬链接目录的条目应该指向什么?)
答案2
目录的 NTFS 重分析点非常类似于 Linux/UNIX 中的环回挂载。
文件的 NTFS 硬链接非常类似于 Linux/UNIX 中文件的硬链接。
NTFS 符号链接非常类似于 Linux/UNIX 中的符号链接。
Windows 版 Cygwin 的旧版本将重分析点视为硬链接,这导致 /usr/bin/find 抱怨文件系统中存在循环。就 POSIX 兼容程序而言,Cygwin 的更高版本将重分析点视为与符号链接相同。