//foo/bar 与 /foo/bar 在哪些系统上不同?

Sté*_*las 118 slash filenames history portability

在整个 POSIX 规范中,都有规定 ( 1 , 2 , 3 ...) 允许实现/特别处理以 2 开头的路径。

POSIX 应用程序(根据 POSIX 规范编写的应用程序可移植到所有 POSIX 兼容系统)不能假设//foo/bar与 相同/foo/bar(尽管他们可以假设///foo/bar与 相同/foo/bar)。

现在那些//foo特殊对待的 POSIX 系统(历史悠久且仍在维护)是什么?我相信(我现在被证明是错误的)微软为他们的 Unix 变体 (XENIX) 和可能的 Windows POSIX 层推送了 POSIX 条款(有人能证实吗?)。

它被 Cygwin 使用,Cygwin 也是 Microsoft Windows 的类似 POSIX 的层。是否有任何非 Microsoft Windows 系统?开放虚拟机?

//foo/bar特殊的系统上,它用于什么?//host/path用于网络文件系统访问?虚拟文件系统?

某些运行在类 Unix 系统上的应用程序(如果不是系统的 API)是否会//foo/bar特别处理路径(在它们否则将其/foo/bar视为文件系统上的路径的上下文中)?


编辑,此后我在奥斯汀组邮件列表上询问了//foo/bar有关规范中处理起源的问题,并且讨论很有趣(至少从考古学的角度来看)。

Sté*_*las 96

这是迄今为止给出的答案的汇编和索引。这篇文章是社区维基,任何拥有 100+ 声望的人都可以编辑它,并且没有人从中获得声望。随意发布您自己的答案并在此处添加指向它的链接(或等待我做)。理想情况下,这个答案应该只是一个摘要(有简短的条目,而其他个别的答案会有详细信息)。

目前积极维护的系统:

废弃的系统

//foo/bar专门处理路径的应用程序

  • 一些 Linux 内核开发人员为 Reiser4 的元数据设施提议使用 `//` 命名空间,但我认为这个提议在 Namesys 中没有获得关注,也没有被实施。 (3认同)

Pre*_*rem 16

一些运行在类 Unix 上的应用程序——如果不是系统的 API——是否特别对待 //foo/bar 路径?

我知道 Perforce 使用//depot/A/B/C/DPaths 来引用 Depot。Perforce 还支持//Client/C/D路径,当客户端指向//depot/A/B/. 在这里,本地文件系统可能没有这些路径。

p4 filelog //depot/A/B/C/D即使没有文件,也会显示该文件的历史记录/depot/A/B/C/D

p4 filelog C/D 如果从适当的目录执行,还将显示该文件的历史记录。

参考:https : //www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html


jll*_*gre 13

几十年前,泰克Utek(基于 BSD 4.2 的 Unix,首先在 National Semiconductors 32016 CPU 上,然后是摩托罗拉68020 s)提供了一种称为 DFS(分布式文件系统)的东西,它//foo/bar指的/barfoodfs 服务器上的文件。后来它被 Sun 的 NFS 淘汰了。

不幸的是,我还没有提到支持这一点,但我最终可能会在我的地窖中找到一些 Utek 文档并更新此回复。


小智 7

跟随这个答案的线索。并阅读Bitsavers 手册中的第 2-15 页(感谢@grawity)。

共享数据
Domain/OS 分布式文件系统的第二个设计原则,默认共享,意味着全局统一命名空间。分布式文件系统的命名空间在用户看来就像一个巨大的分时文件系统。它是传统的 UNIX 分层名称空间,只是绝对路径名可以以网络根的名称(称为 //)开头。也可以表示相对于本地节点的根(/ 目录)的路径名。

还有一本旧手册,上面写着“首次印刷:1985 年 7 月”。在第 1-4 页上:

图1-2中的双斜线(//)代表命名树的顶层,即网络根目录。

因此,我们确认 Apollo 的 Domain/OS//用于网络根。


mik*_*erv 5

ReactOS的项目-这是一个免费和开源实现的NT内核和相关的API -显然已经承诺也实现了自己的Interix样POSIX子系统(虽然MS原来的OS / 2子系统也是在上下文中提到,没有提及由 ReactOS 模拟制成)

尽管迄今为止的努力很小,但fork()显然已成为现实。以下是子系统项目页面的摘录,列在open issues 下

路径

在 POSIX 应用程序中使用 Win32 路径的最佳方法是什么?想法:

  • 翻译//<device>/<path> into \\.\<device>\<path> (驱动器号的特殊情况 - //<letter>/<path>=> <letter>:\<path>- 和特殊的转义//./<raw text>=> \\.\<raw text>。UNC 路径可以用 指定//unc/<path>//路径由标准保留用于特定于实现的行为,并且//<letter>/在现有的 POSIX 兼容性环境中广泛使用转义 Win32 路径的语法

  • 识别“裸” Win32 路径的启发式方法

  • Win32 路径和//路径的不区分大小写查找(标准是否允许//路径的这种特定于实现的行为?)

我不确定它是如何限定的,因为我不确定它已经实现了多少,但我认为这是对问题的一个有用的有趣描述。


wch*_*gin 5

另一个应用程序:Blender将行首视为//对项目目录(.blend保存文件的目录)的引用。这是相关的手册页

对于非类 Unix 操作系统(即 Windows)也是如此。