Windows有几个“虚拟文件夹”和“特殊文件夹”(维基百科的名称),它们改变了文件系统的工作方式。例如,Desktop
文件夹在某些情况下就像文件系统层次结构的根一样,即使C:/
是整个文件系统所在的驱动器(也称为分区),因此逻辑上Desktop
应位于C:/
之下。屏幕截图: 还有Library
个文件夹。此外,在您的计算机上使用msysGit
和Cygwin
,程序的文件夹就会神奇地成为文件系统的根目录。
我确定其他操作系统上有实例,但我只是真正使用Windows,尽管看起来Linux的抽象性要差得多。
应用程序如何做到这一点?它只是一个非常复杂的shell脚本,或只影响某些程序的东西(例如,维基百科说Desktop
只是Windows Explorer
中的根文件夹)?它是否类似于Linux上所有文件夹的“挂载”,甚至是根文件夹?即使操作系统开发人员通常不会泄露他们的秘密,如果可能的话,我仍然想知道基本方法。
答案 0 :(得分:1)
所以,wikipedia's entry for special folder说:
Desktop虚拟文件夹是Windows Shell命名空间的根目录, 其中包含其他虚拟文件夹。
这与说“文件系统层次结构的根”不同。 Windows有一组虚拟文件夹。所有这些都嵌套在桌面下。
对于Win7及更高版本,默认的文件系统布局实际上是:
这些别名对于资源管理器shell来说意味着什么,但不是在文件系统级别(打开cmd.exe,看看我的意思)。
在文件系统级别和应用程序中,文件系统路径才是最重要的。它需要额外的API调用(使用SHGetSpecialFolderPath())来确定特殊文件夹所在的文件系统的位置;应用程序只关心文件系统中需要定位的位置。
至于Cygwin,我强烈怀疑它正在做一些完全不同的事情。 Unix有一个特殊的调用chroot()
,它确实修改了当前运行的shell的根目录。这意味着在该shell下运行的应用程序完全不知道chroot()'d
路径下的目录结构,这通常是出于安全原因。实际上,这通常被称为chroot jail,因为它不是别名或虚拟目录,并且无法转义(除非内核中存在错误)。