为什么DOS路径字符为“ \”?

2021-02-26 17:07:33

许多月前,Declan Eardly询问为什么选择\字符作为路径分隔符。这一切都源于Microsoft与IBM的关系。对于DOS 1.0,DOS仅支持软盘。

许多DOS实用程序(command.com除外)都是由IBM编写的,它们使用了" /"。字符作为"开关"实用程序的字符(“开关”字符是用于区分命令行开关的字符-在* nix上,它是“-”的字符,在大多数DEC操作系统(包括VMS,DECSystem-20和DECSystem-10)上,它是" /"字符(注意:是否为灰色" /"字符来自IBM或Microsoft-一些最初的MS-DOS开发人员是旧的DEC-20开发人员,因此他们有可能将其从DEC继承下来背景)。

" /"与另一个相对流行的操作系统的路径字符冲突的字符与原始开发人员并不特别相关-毕竟,DOS不支持目录,仅支持单个根目录中的文件。

然后出现了DOS 2.0。 DOS 2.0与PC / XT绑定在一起,后者的主要功能是10M硬盘。 IBM要求Microsoft添加对硬盘的支持,而MS-DOS开发人员以此为契机添加了对现代文件API的支持-他们向系统添加了一系列基于句柄的API(DOS 1.0依赖于受控制的应用程序结构,称为FCB)。他们还必须增加对分层路径的支持。

从历史上看,现在已经有许多不同的机制可用于提供分层路径。例如,DecSystem-20将目录表示为:"< volume>:"<"< Directory> [。< Subdirectory>">" FileName.Extension [,Version]" (" PS:< SYSTEM> MONITR.EXE,4")。 VMS使用了类似的命名方案,但不是<和>它使用[和]字符(VMS使用&#34 ;;"来区分文件的版本)。 * nix使用以" /"为根的简单层次结构定义层次结构路径。 -在* nix的命名层次结构中,没有办法区分文件和目录等(这很不错,顺便说一句,就是这样)。

对于MS-DOS 2.0,DOS的设计者选择了一个混合版本-他们已经支持DOS 1.0中的驱动器号,因此他们需要继续使用它。他们选择使用* nix样式方法指定层次结构-而不是在文件名中调用目录(例如VMS和DEC-20),他们只是使目录和文件名无法区分路径。

但有一个问题。他们不能使用" /"的路径分隔符的* nix形式,因为" /"被用作切换字符。

那他们该怎么办?他们本可以使用"。"字符,例如DEC机器,但"。"字符用于区分文件和扩展名。因此,他们选择了下一个最好的东西-" \"字符,在视觉上类似于" /"特点。

这是关于MS-DOS的一个鲜为人知的秘密。 DOS开发人员对这种情况并不特别满意-哎呀,他们都使用Xenix机器来发送电子邮件和其他东西,因此他们熟悉* nix命令的语义。因此,他们对操作系统进行了编码,以接受" /"或" \"字符作为路径字符(顺便说一句,今天继续进行-尝试在XP计算机上键入“记事本c:/boot.ini”(如果您是管理员))。他们又走了一步。他们添加了一个未公开的系统调用来更改开关字符。并更新了实用程序以遵守此标志。

然后他们继续并完成了该方案:他们添加了一个config.sys选项SWITCHAR =,该选项可让您将开关字符设置为"-"。

从而将MS-DOS转换为* nix样式的系统,其中命令行使用" -switch&#34 ;,并且对路径进行了/分隔。

我不知道switchar API的命运,它已经走了很多年了。

对于类似的文章,请参见此http://netwhatever.com/faq/inicio.html中的条目III.15。还要注意,/是CP / M和QDOS(Dos1属于当然基于)是CP / M的克隆。

有趣的是,我一直想知道为什么DOS使用了与UNIX不一样的东西,而UNIX已经很好地建立并接受了标准,有时我想知道它是否只是为了与众不同而有所不同。很高兴看到这个假设是错误的。

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈只是标题的拼写。我向blogs.msdn.com提交了一个错误报告,抱怨HtmlEncoding被弄乱了,以它们为示例,指出了Date& Time。然后,他们给我发送了一封电子邮件,通知他们已对其进行了修复,并且可以肯定的是,您的日期和时间标题已修复-现在不再是日期和时间。看来他们只是骇入了Replace(Overlyescapedtitle,&#34 ;,"& 34)行,而不是查找并删除多余的HtmlEncode。 ROFL我笑了,所以我不会哭。

只是想知道这里的一些细节:"对于MS-DOS 2.0,DOS的设计者选择了一个混合版本-他们已经支持DOS 1.0的驱动器号,因此他们需要继续使用它。那么,驱动器号是从哪里来的呢?我真的很讨厌他们:)现在,我可以并且确实可以使用交叉点,但是您仍然需要至少剩下一个。使用统一文件系统可以使它更加干净:)而且,只要您可以执行dir / devices之类的操作,发现诸如CON,NUL,LPT设备之类的特殊文件就变得更加容易。

之所以出现驱动器号(至少在我看来是这样)是因为第一台PC支持两个磁盘驱动器。在分配它们时,字母解决了如何访问它们的问题。 A:用于第一个驱动器,B:用于第二个驱动器。当硬盘驱动器出来时,它的驱动器号为C :,因为它是下一行。

我不明白为什么开关/参数字符不能出现在路径中。 Unix在使用具有路径的路径时没有问题-在其中,大多数系统(包括Windows)都可以处理其中带有空格的路径,即使使用空格来分隔参数等。

>那么,驱动器号是从哪里来的呢?为什么选择CP / M,是哪个QDOS(以及DOS 1)的克隆版本。在此处阅读http://www.iso.port.ac.uk/~mike/interests/chistory/documents/cpm-22-manual/的第一章,了解DOS的真正遗产在哪里...

>如何删除名为" -r"的文件?与" rm--r"当然。实际上,有很多方法可以做到这一点。

我希望可以有一个目录连接指向已安装的UNC路径的驱动器号。这是唯一使我摆脱惊叹的单个文件系统的事情:我的东西可以驻留在另一台计算机上,并且无法将L:\ My Documents映射到C:\ My Documents是L:\是一条已安装的路径。否则,它可以正常工作。为什么会这样呢?为什么安装的UNC路径有什么不同?

我太年轻了,第一手知道这个,所以我会问。为什么会有一个" \"首先是键盘上的按键吗?据我所知,它们在英语语法中还没有被使用,直到今天,大多数普通用户还不知道哪一个是“后退”的。并且是“转发”。我想我可以就" {"和"}"但我不太介意这些。由于DOS和Windows处理" /"以及" \"如果切换到使用" /"默认情况下,由于Internet URL使用正斜杠,并且大多数人都熟悉斜杠(即使浏览器/ Web服务器也必须支持" \&#34 ;,由于我前面提到的问题,最终导致服务器端网络软件中的安全性错误)。我无法想象切换到" /"这会损害很多向后兼容性,因为这些天大多数路径参数都必须用引号引起来(由于不必要的冗长的" Document and Settings"" Program Files")。我也想摆脱驱动器号。我考虑将多合一存储卡读取器安装到硬盘驱动器上的文件夹中,因为我已经厌倦了使用C:,D:,E:,F:,G:,H: ,I :、 J:都显示在“我的电脑”下(以及X:,Y:和Z :,但这是我的职责)。如果我安装了所有东西,我可以假装C:代表" Computer,"。但是我怀疑安装CD-ROM会导致某些讨厌的受版权保护的游戏(这是我的另一个讨厌的游戏)出现问题。我希望Monad可以帮助减少驱动器号的可见性,但是我错了。它甚至不支持将当前路径更改为UNC共享,这是CMD.EXE和任何将来的shell的巨大限制。

>为什么会有一个" \"首先是键盘上的按键吗?据我所知,它们在英语语法中还没有被使用,直到今天,大多数普通用户还不知道哪一个是“后退”的。并且是“转发”。反斜杠是由鲍勃·贝默(Bob Bemer)发明的,网址是http://www.thocp.net/biographies/bemer_bob.htm。它的用途是使您可以使用/ \和\ /符号(如果您已经使用了AND和OR,曾经在ALGOL语言中完成过布尔逻辑)。

当然,我的意思是"不是。根据要求,我希望msdn博客具有预览按钮。

> CPM是从哪里获得的?我上面提到的DEC操作系统。我以为问题是关于驱动器号的。 RSX-11文件路径类似于DR0:[30,12] FILE.TXT; 10第一张软盘上文件的CP / M文件路径类似于A:PROGRAM.COM Tim Patterson,他编写了QDOS(DOS的基础) 1)是根据CP / M手册进行的。我从未听过有人提到他花了任何时间在任何DEC机器上。 DOS最初是CP / M的克隆(类似于Linux最初是U * IX的克隆),这没什么错,我只是认为人们经常会掩盖历史。我最喜欢的加里·基尔德尔(Gary Kildall)在这个问题上的报价是:"问Bill [Gates]为什么函数9中的字符串以美元符号终止。问他,因为他无法回答,只有我知道。