问题 检测符号链接,连接点,挂载点和硬链接[重复]


这个问题在这里已有答案:


8538
2018-03-21 13:33


起源



答案:


符号链接,连接点和挂载点都是不同重新分析点的示例。但是,硬链接只是常规文件。在NTFS上,所有文件都是硬链接。您可以检测到文件有多个指向它的硬链接,但它没有指向的“真实文件”。您可以将硬链接视为同一文件的不同名称。

以下是有关从C#访问重新分析点的一些信息: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

以下是有关如何在C中执行此操作的一些信息: http://blog.kalmbach-software.de/2008/02/


10
2018-03-21 13:42



好吧,这意味着如果一个FileA.txt和一个指向FileA.txt的硬链接FileB.txt,就无法检测到FileB.txt是一个硬链接? - Alexander
他们两个都是硬链接。 - akappa
好的,有没有办法检测挂载点? - Alexander
我不认为有一种可移植的方法,因为它是一个操作系统定义的概念。在linux上,您只需访问/ proc / mounts并获取每行的第二个字段。 - akappa
装载点是重新分析点,就像交叉点一样。你在问如何区分不同类型的重新分析点吗?或者你想知道他们指的是什么? - Gabe


答案:


符号链接,连接点和挂载点都是不同重新分析点的示例。但是,硬链接只是常规文件。在NTFS上,所有文件都是硬链接。您可以检测到文件有多个指向它的硬链接,但它没有指向的“真实文件”。您可以将硬链接视为同一文件的不同名称。

以下是有关从C#访问重新分析点的一些信息: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

以下是有关如何在C中执行此操作的一些信息: http://blog.kalmbach-software.de/2008/02/


10
2018-03-21 13:42



好吧,这意味着如果一个FileA.txt和一个指向FileA.txt的硬链接FileB.txt,就无法检测到FileB.txt是一个硬链接? - Alexander
他们两个都是硬链接。 - akappa
好的,有没有办法检测挂载点? - Alexander
我不认为有一种可移植的方法,因为它是一个操作系统定义的概念。在linux上,您只需访问/ proc / mounts并获取每行的第二个字段。 - akappa
装载点是重新分析点,就像交叉点一样。你在问如何区分不同类型的重新分析点吗?或者你想知道他们指的是什么? - Gabe


硬链接:

您可以通过调用Win32 API函数来检测多个名称是否指向相同的“数据块”或“文件内容” GetFileInformationByHandle。返回的nNumberOfLinks成员 BY_HANDLE_FILE_INFORMATION 结构包含链接总数

装载点:

您可以使用迭代遍历卷上的所有挂载点 FindFirstVolumeMountPoint 和 FindNextVolumeMountPoint。也 FindVolumeMountPointClose 应该用来关闭搜索句柄。

来自.NET

从.NET执行此操作需要一些P / Invoke魔法


5
2018-02-21 14:53





请看我的问题 NTFS Junctions,无法理解API。这是问题的重复。但我解释了如何使用C / C ++实现重分析点,挂载点,连接点和符号链接。盲目地......而不只是给API链接......


1
2018-03-01 18:18