NTFS 连接和 Unix 硬链接

ser*_*seb 3 filesystems

我正在为 CIL 代码构建一个 IO 抽象库,我很难理解 NTFS 和硬链接中两个文件夹之间的连接之间的差异。

它们是等价的吗?我应该了解哪些差异?

eph*_*ent 8

NTFS 连接点是一种重解析点,有效地充当符号链接,但仅限于通过绝对路径定位本地目录。

假设你有

C:\>mkdir a b
C:\>linkd b\c C:\a
Run Code Online (Sandbox Code Playgroud)

发生的情况是,在 for 的目录表中C:\bc插入了一个名为的目录条目,其属性$Reparse包含指定它是与 target 的连接点的数据C:\a

当 Windows 2000(引入重分析点和连接点时)遇到重分析点时,它会被移交给适当的处理程序。在这种情况下,当访问下面的路径时C:\b\c,连接点的处理程序会将路径替换为C:\b\cC:\a并且正常的文件系统操作将从那里继续。

可以安装其他文件系统过滤器来拦截和处理其他类型的重解析点;Windows Vista、Server 2008 和更高版本带有 NTFS 上“符号链接”重解析点的处理程序,它可以指向文件或目录,绝对或相对,本地或远程 - 与其他系统上的符号链接非常相​​似。


另外,NTFS 确实支持硬链接,与 UNIX 的方式大致相同——多个目录条目可以指向同一个“inode”,即实际的文件数据。这与重新分析点无关。在几乎所有系统上,只能对文件进行硬链接;硬链接目录充满危险。(除其他外,..硬链接目录的条目应该指向什么?)

  • NTFS 和 UNIX 文件系统上的符号链接几乎相同,只是 NTFS 符号链接可以指向远程文件系统,而 UNIX 并没有真正的标准。NTFS 上的连接类似于符号链接,但仅限于本地目录的绝对路径,所以是的,UNIX 文件系统上的符号链接完全包含 NTFS 上连接的所有功能。 (2认同)